[GUI] RFC: CGA-Example 1.2 stuff
Wolfgang Thaller
wolfgang.thaller@gmx.net
Fri, 2 May 2003 10:32:32 +0200
> Before I finish CGA-Example 1.2 we ought to reach a sort of concensus
> on certain issues. Here is what I think will be in 1.2. This is a
> RFC:
> ####
> ## 1. A matching LaTeX specification.
Sounds good.
> ####
> ## 2. toWidget out of IO Monad.
> That is if we want to continue with this route. The other route being
> the class hierarchy.
> Benefits of toWidget style:
I'm not sure if I got the terminology straight...
Does "toWidget style" mean there will be more pairs of functions like
toWidget/fromWidget, or does it just mean "keep fromWidget and toWidget
in there"? If it's the second: I vote YES, as long as it doesn't
include Windows, if it's the first, I vote "no, for now".
> Allows for lists of widgets.
Yes. That's why I think we need it (or at least something like it) for
implementing dynamic layout.
> ####
> ## 3. Multiple Callback Support with unregister support.
> This is fine and dandy minus the implementation details. If this is
> implemented in Haskell, we have two possible ways to do this. These
> refer to each callback list instance.
> a) We maintain a list of IO callback methods. Each callback is
> identified by it's index in this list. When a callback is
> unregistered, it's index is changed to the (return ()) callback.
> b) Each callback is given a unique identifier by some generator. When
> a callback is unregistered, it will filter the list and remove the
> invalid callback.
a) is good enough for a sample implementation, but in the end, I'd
recommend b) (for platforms where multiple callbacks aren't implemented
in the foreign toolkit library).
> ####
> ## 4. Is a Window a Widget?
> a) No Windows.
Sounds like a nice idea, but no. It's too "strange" (in the sense of
"new"), we don't know yet if it can work properly, and it adds
complexity to implementations.
> b) Windows are not widgets. This can be done easily enough. It is
> less elegant as a) IMHO opinion.
> c) Windows are widgets. We must think about and handle the cases
> when a window is not a parent.
I'm for b), in the sense that Window should not be an instance of
IsWidget. Implementing a common generic type for Windows and
Controls/Panes is tedious/artificial on MacOS.
I see no problem with Window being an instance of classes like HasSize,
HasTitle etc. and providing many features that other widgets have.
> ####
> ## 5. Adding children to a parent.
> If 4a) was implemented, we could talk about widgets independent of
> parents and it wouldn't be a problem on Mac.
The problem would still be there; but part of the complexity would
already be necessary due to 4a.
> Benefits of parent construction:
> Writing backends for Mac platforms would be easier.
In fact, if parents are not mandatory arguments to the widget
constructor, writing backends for Carbon (Mac OS) and Xt (Motif) would
become perhaps about twice as much work. The backend would have to keep
a Haskell data structure with the values for all attributes that have
been set; the native widget could only be created when the container
(or, in the case of Mac OS, at least the window) became known.
If someone moves a widget from one window to another, the Mac backend
would have to automatically destroy the widget and create a new one. I
think we can live without that functionality for now.
> ####
> ## 6. certain Has* functions need to be made for every widget
> The fltk implementation is more verbose than it needs to be. I could
> have made these redundant functions transform the item into a
> Fl.Widget for a default.
Yes.
Most importantly, we will need CGA.Widget to be an instance of certain
Has* functions, too, in order to implement dynamic layout managers like
GridBox. The GridBox would have a list of widgets to lay out along with
the corresponding layout attributes, and then it would have to query
the widgets for things like minimum size, preferred size and so on, and
then modify the layout of the widgets. So we do need access to that
default.
> ####
> ## 7. Heiarchy
> Should there be an object hierarchy? Since this is a simple thing to
> add after it has been implemented with the Has* functions, I suggest
> we push this back. Since toWidget is simple enough for now, I think
> we should stick too it. (I'm interested in counter-opinions though)
I agree.
Please also have a short look at my last posting in the "Re: [GUI] Are
windows just ordinary widgets?" thread. It contains a snapshot of my
thoughts as of yesterday evening...
Thanks for your work on the CGA Example; I think the example 1.1 has
already brought the discussion a great deal forward.
Cheers,
Wolfgang