[GUI] State, Attributes and Some basic widgets
Wolfgang Thaller
wolfgang.thaller@gmx.net
Mon, 14 Apr 2003 23:22:15 +0200
> While I can see the advantage of providing your own i18n mechanism
> (potentially less work), it would be a "second best", IMHO. For the Xt
> version, allowing the user to customise it via X resources is the
> "native" approach. In order for that to work, it's necessary that the
> application doesn't override the X resources programmatically.
But surely we shouldn't limit what applications can do. I have no
problem with placing a note in the documentation that says "don't
change labels programmatically, you'll prevent Xt users from
customizing your App the way they like".
>> Do any programs support
>> placing their windows on more than one screen?
>
> It's most common with graphics software, e.g. allowing a monochrome
> screen to be used for the UI to free up space on the colour screen for
> the graphics.
>> Can this reasonably be
>> inside the scope of a cross-platform library? (We might still have
>> platform-specific extensions for this, but that's none of my
>> business).
>
> Yes; a platform which has no concept of separate screens will only
> ever have screen 0 (i.e. like most of the boxes which run X).
Well, it looks like platform-specific extension to me...
You'd have
myWindow <- window DocumentWindow [... attributes ...]
... which uses the default screen for Xt, and for Xt only, you'd have
something along the lines of
myWindow <- windowOnScreen_XT 2 DocumentWindow [... attributes ...]
which, on X, will use screen 2.
(We could still provide a stub implementation of this function for
other platforms, to allow compilation everywhere...)
The reason why I prefer to have that clearly marked as an extension is
that I, for one, would have been thoroughly confused by a window
creation function that expects me to specify a screen number. And I
would especially have had problems with understanding the notion that
my dual-monitor Mac only has one "screen".
>>> It may be necessary to reflect some of this detail into the API,
>>> primarily due to efficiency considerations; repeatedly converting
>>> fixed data from a "portable" format is undesirable.
>> [...]
> [...]
Okay, I see the problem. Discussion topic number one for the chapter
"Images and Drawing" :-).
>> A few things that need working out are:
>>
>> a) What types and classes should be used to represent widgets in
>> Haskell?
>
> Even if you have specific types for specific widget classes, you
> definitely need a generic Widget type, and any operation which could
> reasonably be expected operate on any widget should.
Probably. The question is, to what extent do we use type classes to
achieve this, etc...
I would advocate specifc types for specific widget classes (e.g.
Button, ScrollBar, etc.), just because it's the Haskell Way ;-) .
If we also have a general Widget type, we could have functions like
fromWidget :: Widget a => Widget -> Maybe a
and
toWidget :: Widget a => a -> Widget
That's all for now,
Cheers,
Wolfgang