[GUI] CGA-Example 1.1
Wolfgang Thaller
wolfgang.thaller@gmx.net
Sat, 19 Apr 2003 01:17:18 +0200
> =====================
> CGA-example version 1.1
> =====================
Great Stuff!
> 1) How does the interface look in Test_midlevel.hs? Is there any
> critiques in
> regard to using this style in CGA (Common GUI API)?
Looks nice.
What I don't like:
*) Why is toWidget in the IO monad?
Instead of
a <- toWidget hello
set window [ children =: [a], visible =: True ]
I'd rather write
set window [ children =: [toWidget hello], visible =: True ]
*) No dynamic layout yet.
If we have a container that does dynamic layout similar to Java's
GridBagLayout, then of course we don't want to set size and position
attributes for each widget. We'd set row, column, row span and column
span attributes instead.
Those layout constraints are not really attributes of the widget
itself. Rather, they should perhaps be passed along with addChild.
But right now I can't think of how to do it without multi-parameter
type classes (we wanted to stick to H98, didn't we?):
class HasAddChild a c where
addChild :: IsWidget b => a -> b -> c -> IO ()
class HasChildren w c where
children :: Attr w [(Widget,c)]
... where c would be a set of coordinates, or a set of row & column
numbers, depending on what kind of container we are in.
In a container with dynamic layout, position and size would still make
sense as a read-only attribute, but explicitly setting the position
would be questionable.
> 4) What do you think is important to have in the next version of
> CGA-example?
Some framework for dynamic layout, see above.
> I encourage those who code, to implement their ideas for the Common
> GUI API
> using this simple framework. This would allow all reviewers to
> understand
> exactly what you are talking about by running your examples.
I've already started compiling fltk...
Cheers,
Wolfgang