В wxHaskell к элементам управления прикреплены свойства, которые можно прочитать или изменить.Раздел [Prop (Grid ())] можно понимать как «список свойств для любого типа сетки».
Это способ wxHaskell справиться с тем фактом, что библиотека wxWidgets, на которой он построенявляется объектно-ориентированным.Grid () на самом деле означает «что-либо в иерархии наследования, из которого происходит Grid» - т.е. Grid, ScrolledWindow, Panel, Window, EvtHandler, wxObject (вы можете выполнить это, если начнете с http://wxhaskell.sourceforge.net/doc/Graphics-UI-WXCore-WxcClassTypes.html#204)
КогдаЕсли вы посмотрите документацию элемента управления (например, ListCtrl), то обнаружите, что он имеет набор атрибутов и экземпляров. По сути, вы можете использовать те, которые применяются к иерархии для Grid. Например, Grid происходит от ScrolledWindow,поэтому вы можете использовать:
- Атрибут scrollRate
- Атрибуты класса Colour, например, bgcolor, color
- и т. д.
Вы используете этиследующие свойства, например
g <- gridCtrl parent [color := red, bgcolor := green, scrollRate := 41]
...
set g [color := blue]
Строка за строкой, код выглядит примерно так:
- Использование предоставленных свойств ( props )
- и initialWindow (который заполнит окно id и начальные rect и flags ), вызовут обтекание потокафункции по порядку:
- gridCreate для создания нового экземпляра сетки
- Используя новый экземпляр сетки, установите сетку внутри с 0 строками, 0 столбцами и ничем не выделенными.
- Примените свойства ( реквизиты ), предоставленные вызывающей стороной к сетке (например, вставьте данные, установите стили и т. Д.)
Часть, которая делает код труднее для чтения, это feed2 и тот факт, что код написан в стиле '$', чтобы обеспечить правильные параметры для feed2.Моего пояснения, приведенного выше, должно быть достаточно, но если вы хотите понять детали, поймите, что feed2 - это просто приложение с инвертированной функцией
feed2 x y f = f x y
, затем замените приложения '$' на круглые скобки.Это не выглядит мило, но его легче читать.
gridCtrl parent props =
feed2 props 0
(initialWindow (\id rect ->
\props flags ->
do
g <- gridCreate parent id rect flags
gridCreateGrid g 0 0 0
set g props
return g )))