Monday, April 10, 2006

After playing around most of the weekend with the concept, here is what I plan to do for scrolledwindow widgets:

-- scrolled window widgets are a mix of a container and control; much like the window tag, having both a concrete implementation (e.g., NSScrollView in Cocoa) and a non-concrete representation in the layout engine that manages the layout of children.

-- scrolled windows will have the following attributes assignable in markup:

-- "width" and "height" will determine the size of the scrolled window control in a window.
-- "innerwidth" and "innerheight" will determine the scrollable view, and will represent the bounds into which the layout engine can place children. The scrollbars will be used to manipulate a view, of size "width" and "height" over this area.
-- Finally, the "vertical" and "horizontal" attributes will determine the presence of vertical and horizontal scrollbars. If set to "true", the corresponding scrollbar will be made available. Otherwise, if set to "false", the corrersponding scrollbar will not be visible.

-- the scrolled window, like a window, will support a box layout with a vertical orientation. Thus, a scrolled window is just a vertical box with optional scrollbars and a viewing area that can be smaller that the layout area. Any widget (except windows), including spacers and embedded scrolled windows can be made children of a scrolled window.

Here is some example markup:

<scrolledwindow width="200" height="200"
vertical="true" horizontal="false" innerwidth="500" innerheight="500">
<button onclick="return Button1Click();" label="&button1.label;"/>
<button onclick="return Button2Click();" label="&button2.label;"/>

The above should result in a scrolled window that vertically manages two buttons in a 500x500 region. The viewable region is 200x200, and the view can only be scrolled in the vertical direction.