comp.lang.ada
 help / color / mirror / Atom feed
From: "Warren W. Gay VE3WWG" <ve3wwg@cogeco.ca>
Subject: Re: [OT] Best way to isolate a GUI?
Date: Mon, 17 Feb 2003 22:39:08 -0500
Date: 2003-02-17T22:39:08-05:00	[thread overview]
Message-ID: <3E51AADC.6060702@cogeco.ca> (raw)
In-Reply-To: 3E518EA0.1080702@acm.org

Jeffrey Carter wrote:
> Warren W. Gay VE3WWG wrote:
>> This sounds conceptually nice, but it could prove to have practical
>> problems (I need to think about this more, myself). Thinking in terms
>> of an X11/MOTIF application, where there can be hundreds of windows 
>> within
>> windows to implement widgets on a form, this translates to hundreds
>> (if not more) of tasks. This smells a lot like overkill upon first
>> blush at least.
> 
> I wouldn't think you'd want a queue for every widget. I'd think one per 
> top-level window would be about right. The events in the queue would 
> have to identify the widget that generated them. In some cases you'd 
> have a task for every window, while in others one task might handle the 
> events from several windows. It's a question of what the problem's 
> concurrency needs are, not what the windowing system forces on you. You 
> wouldn't be forced to declare any tasks, if tasking's not appropriate to 
> the problem.

I see two problems developing with this:

1. deciding how to segregate the work between which widgets and tasks
    (ie. the infrastructure becomes more complicated because you now must
     decide which windows get their own tasks and which ones don't).

2. Each queue must contain a big case statement for all of the widget
    cases it must separate the code out for.  The callback approach only
    has to call all registered callbacks for _that_ widget, on its callback
    list. The callback is already specific to the widget, so no big case
    statement is required.

    This queue also suffers from the problem that you would need to code this
    ahead of time (you must plan a when clause for a particular widget in
    a queue's event processing section).  This makes it more difficult to
    handle dynamically created widgets (like popups), because you would then
    have to plan for it in the code. Whereas the callback is already there
    for any created widget.

Since GUIs often have widgets created and destroyed on the fly (like a message
box), I can't see this being very practical. The fact that I don't see any
GUI framework structured this way yet, suggests to me that there are reasons
why this is not practical. However, this is not to say that nobody should
try it ;-)

>> Additionally, where the application wants access to one event, it would
>> need to provide an entire task, and then have null handlers for all
>> the events it was not interested in (I think).  I think I'd need
>> to prototype this to get a better feel for this.
> 
> There can be an awful lot of different events from a window. I would 
> think you could tell the system what events to report and which to 
> ignore, with a default set that is frequently useful. Then, if you're 
> only interested in the close event from a window, it won't send you 
> anything else.

It is easier to call a callback list than to mainain a list of what
events to pay attention to or not, IMHO. It is certainly conceptually
cleaner.

>> It might be easier to start with a tagged object, where methods can
>> be inherited and overriden instead. That way all events can just
>> do nothing, while you override the events you are interested in.
>> But this takes us back to a model similar to callbacks anyways, but
>> instead of registering a callback, you register a tagged record
>> to receive callbacks.
> 
> This is the approach taken by CLAW. A widget is represented by a tagged 
> type, with primitive operations that are called automatically when 
> certain events occur. There are default versions of these operations. To 
> create a widget with specific behavior, you have to extend the type and 
> override the appropriate operations. 

Definitely a useful application of tagged records.

>> I can't speak for CLAW, and the one shortcoming I see in JEWL is that
>> you cannot get "focus events".
> 
> JEWL is deliberately a simple system, and the lack of some features is 
> the price of that simplicity. The concept of the application actively 
> requesting events from the windowing system is one that could be applied 
> to a more complex windowing system.

I was not being "critical" of JEWL, but merely pointing out that it does
have "limitations". This was one I noticed right away when looking to see
if I could make use of it.  Certainly for its intended use in teaching, it
does a wonderful job with its simple interface.

> Nothing's perfect, and GtkAda and CLAW represent a lot of good work. 
> JEWL is very good, too, for its application area of providing a simple 
> windowing system for beginners.

I don't think anyone was trashing these efforts. It is good to discuss
the strengths and weaknesses of the various tools from time to time.
Even mine ;-)  As software engineers, I think we can handle some
constructive remarks from time to time. 8-O

-- 
Warren W. Gay VE3WWG
http://home.cogeco.ca/~ve3wwg




  reply	other threads:[~2003-02-18  3:39 UTC|newest]

Thread overview: 57+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-02-16 10:19 [OT] Best way to isolate a GUI? Jano
2003-02-16 14:47 ` Ed Falis
2003-02-16 14:49 ` Victor Porton
2003-02-17 20:52   ` Jano
2003-02-16 16:36 ` Robert C. Leif
2003-02-17  8:44   ` Preben Randhol
2003-02-17 16:22     ` Robert C. Leif
2003-02-17 17:30     ` Jeffrey Carter
2003-02-17 17:54       ` Warren W. Gay VE3WWG
2003-02-17 19:06         ` Randy Brukardt
2003-02-18  3:15           ` Warren W. Gay VE3WWG
2003-02-18 16:14             ` Robert C. Leif
2003-02-18 18:10             ` Randy Brukardt
2003-02-18 21:12               ` Warren W. Gay VE3WWG
2003-02-18 23:20                 ` Randy Brukardt
2003-02-19 18:28                   ` Warren W. Gay VE3WWG
2003-02-20 19:39                     ` Randy Brukardt
2003-02-20 21:34                       ` Warren W. Gay VE3WWG
2003-02-20  7:50                   ` Dale Stanbrough
2003-02-19 12:49                 ` Marin David Condic
2003-02-19 18:35                   ` [OT] Best way to isolate a GUI? (The final concensous?) Warren W. Gay VE3WWG
2003-02-20 12:40                     ` Marin David Condic
2003-02-20 13:13                       ` Dmitry A. Kazakov
2003-02-20 22:01                       ` Warren W. Gay VE3WWG
2003-02-21  1:25                         ` tmoran
2003-02-21  2:08                         ` Marin David Condic
2003-02-21 17:27                           ` Jeffrey Carter
2003-02-22 14:10                             ` Marin David Condic
2003-02-21 18:02                           ` Warren W. Gay VE3WWG
2003-02-22 14:49                             ` Marin David Condic
2003-02-22 22:50                               ` tmoran
2003-02-23  5:18                               ` Robert C. Leif
2003-02-24 18:06                               ` Warren W. Gay VE3WWG
2003-02-25  1:20                                 ` Robert C. Leif
2003-02-25 17:57                                   ` Warren W. Gay VE3WWG
2003-02-25 12:41                                 ` Marin David Condic
2003-02-25 13:32                                   ` Ole-Hjalmar Kristensen
2003-02-25 17:33                                     ` [OT] Best way to isolate a GUI? (The final fronteer?) Warren W. Gay VE3WWG
2003-02-20  8:26                   ` [OT] Best way to isolate a GUI? tmoran
2003-02-20 12:51                     ` Marin David Condic
2003-02-20 18:47                       ` tmoran
2003-02-17 19:31         ` tmoran
2003-02-18  1:37         ` Jeffrey Carter
2003-02-18  3:39           ` Warren W. Gay VE3WWG [this message]
2003-02-18 23:36           ` Randy Brukardt
2003-02-18 13:29         ` Marin David Condic
2003-02-18 18:01           ` Warren W. Gay VE3WWG
2003-02-19 13:06             ` Marin David Condic
2003-02-16 17:25 ` achrist
2003-02-16 21:24 ` Bobby D. Bryant
2003-02-16 21:52 ` David Marceau
2003-02-17  0:57 ` Re; " tmoran
2003-02-17  7:25   ` Jano
2003-02-17 14:09     ` Bobby D. Bryant
2003-02-17 21:12       ` Jano
2003-02-18  7:24         ` Jean-Pierre Rosen
2003-02-18 13:08 ` Marin David Condic
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox