Are windows just ordinary widgets?

Wolfgang Thaller <[email protected]>
Newsgroups gmane.comp.lang.haskell.gui
Message-ID <[email protected]>
MacOS treats windows and "controls" (i.e. widgets inside a window) as 
completely different things. Most other platforms treat them as 
essentially the same things. Which route should the CGA go?

The situation seems to be something like this:

+ Widget
  everything that occupies space within some coordinate system.
  Has attributes like size.
	- Window
	  A toplevel Window. There will be several variants of this, for 
document windows, dialog boxes etc.
	+ Pane
	  A widget "inside" a window (a window has panes -
	  I've seen this name somewhere, feel free to suggest a more standard 
one)
		- Button
		- GridBox
		- Label
		- etc.

"Container" could be a class outside this hierarchy, implemented by 
"Window", "GridBox" and a few other widgets.
A Container would only contain Panes, never other widgets.
The relationship between a window and a window-modal dialog window has 
nothing to do with the relationship between a window and a button 
inside that window, IMHO, so they shouldn't be expressed using the same 
parent/child relationship.

Now perhaps we want a common datatype "Widget" with functions
     toWidget :: Widget w => w -> Widget
and fromWidget :: Widget w => Widget -> Maybe w

Perhaps we want a datatype "Pane" (or "Control" or whatever) with
	toPane :: Pane p => p -> Pane
and so on.

If I had a "Pane" datatype, I wouldn't really need the "Widget" 
anymore, but of course, one can never know.
The "Pane" datatype would be the natural place to implement a lot of 
functionality at least on Mac OS, so if it's there, I'm happy, and I 
could then implement a Widget datatype as a simple discriminated union 
datatype. If there was no Pane datatype, the implementation for the 
widget datatype would become slightly ugly and inelegant on Mac OS...


Cheers,

Wolfgang
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.