Re: Another RFC on setting and getting.

David Sankel <[email protected]>
Newsgroups gmane.comp.lang.haskell.gui
Message-ID <[email protected]>
--- Glynn Clements <[email protected]> wrote:
> Axel Simon wrote:
> 
> > - Callbacks get separate functions which called
> on<WidgetName><ActionName>
> 
> Just on<ActionName> would be better. The "activate"
> callback is the
> same callback whether it's a push-button,
> toggle-button, etc.

I agree with this.

> > I would like propose the following basic setup,
> together with the 
> > questions how read only attribute can fit in.
> Write only attributes could 
> > be easily added by just supplying "pushButtonNow
> :: Setter Button", albeit 
> > breaking the := syntax - you'd have to say
> > set b ["Hello" =: label, pushButtonNow]
> 
> Read-only or write-only attributes could be
> implemented by throwing an
> error for prohibited operations. Read-only
> attributes could be
> implemented by simply ignoring write operations.

Although I haven't discovered a use for write-only
attributes for a gui toolkit, it seems that it would
fit clearly in the constructor.

newSomething requiredArgument [attribute := list]

For read-only attributes, you would most always want
to read the value and nothing else.

h <- getHeight myButton

And for read and write attributes, the attribute
mechanism works fine.

> > Here it is:
> > 
> > -- An attribute is a property of a widget. It
> knows how to set the
> > -- and how to read the value of this property.
> > data WidgetClass w => Attr a w = <abstract>
> 
> Using "WidgetClass" will confuse anyone who is used
> to Xt. With Xt, a
> "WidgetClass" is a (pointer to a) record which
> describes the class
> itself; the individual widgets have type "Widget".
> In traditional OO
> terminology, "WidgetClass" is the metaclass of the
> "Widget" class.

I don't know anyone who has used Xt; I've only been in
the programming business for 8 years.  Consequently, I
don't think we should make sure the names don't
conflict with the naming scheme of some old libraries.

> > -- An example for a Button widget: The constructor
> has one
> > -- mandatory argument.
> > newButton :: Container -> [Setter Button] -> IO
> Button
> 
> 1. This omits widget name, which should be
> mandatory.

This has been discussed thoroughly earlier.  There
didn't seem to be a consensus to do this.  I suggest
that this be an CGA implementation specific extension.

myButton <- newButton [ title := "Okay", i_name :=
"RightButton" ]

> > -- The Button has at least this attribute.
> > label :: Attr String Button
> 
> So do labels, toggle buttons. Is a label's label
> really different from
> a button's label?

I agree that things like this should use classes:

class HasLabelAttribute a where -- ...

> "Clicked" is likely to be an inappropriate name.
> E.g. several Motif
> widget classes have an "activate" callback. For a
> push-button, this
> may occur either as a result of clicking on a
> button, or using the
> keyboard accelerator (Alt + underlined character),
> or moving the
> keyboard focus to the button then pressing space.
> Either way, it's the
> same callback.

I agree, activated is a much better name than Clicked
for the button example.

> More importantly, most callbacks will need to take
> one or more
> parameters which provide further information about
> the event. E.g. for
> Motif's XmPushButton, the information passed to the
> activate callback
> allows the callback to distinguish between
> single/double clicks. For
> more complex widgets (e.g. text fields),
> substantially more
> information may be passed.
> 
> We would need a CallbackData class in order to
> provide a generic
> function for adding callback handling, e.g.

I do not think a class is necessary.  But for signals
that do have arguments, I suggest we put the arguments
in a tuple.  There will be several times where the
library user would wish to ignore arguments and this
would make it simpler.

onCurserPositionChange (paragraph, position) = -- ...

onCurserPositionChange _ = -- ...



David J. Sankel
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.