On this page:
panel: single<%>
active-child
panel: single-mixin
after-new-child
container-size
place-children
panel: single-window<%>
panel: single-window-mixin
container-size
panel: single%
panel: single-pane%
panel: dragable<%>
after-percentage-change
set-percentages
get-percentages
get-vertical?
panel: vertical-dragable<%>
panel: horizontal-dragable<%>
panel: dragable-mixin
after-new-child
on-subwindow-event
place-children
container-size
panel: vertical-dragable-mixin
get-vertical?
panel: horizontal-dragable-mixin
get-vertical?
panel: vertical-dragable%
panel: horizontal-dragable%

21 Panel

See panel:single-mixin%.

(send a-panel:single active-child child)  void
  child : (is-a?/c area<%>)
(send a-panel:single active-child)  (is-a?/c area<%>)
Sets the active child to be child

Returns the current active child.

panel:single-mixin : (class? . -> . class?)
  argument extends/implements: area-container<%>
  result implements: panel:single<%>
This mixin adds single panel functionality to an implementation of the area-container<%> interface.
Single panels place all of the children in the center of the panel, and allow make one child to be visible at a time. The active-child method controls which panel is currently active.
The show method is used to hide and show the children of a single panel.

(send a-panel:single after-new-child child)  void
  child : subarea<%>
Hides this child by calling (send child show #f), unless this is the first child in which case it does nothing.
(send a-panel:single container-size)
  
exact-integer exact-integer
Returns the maximum width of all the children and the maximum height of all of the children.
(send a-panel:single place-children)
  (listof (list exact-integer exact-integer exact-integer exact-integer))
Returns the positions for single panels and panes.

panel:single-window-mixin : (class? . -> . class?)
  argument extends/implements: panel:single<%>
 window<%>
  result implements: panel:single-window<%>

(send a-panel:single-window container-size info)
  
exact-integer exact-integer
  info : (list-of (list exact-integer exact-integer boolean boolean?))
Factors the border width into the size calculation.

Classes matching this interface implement a panel where the user can adjust the percentage of the space that each takes up. The user adjusts the size by clicking and dragging the empty space between the children.

(send a-panel:dragable after-percentage-change)  void
This method is called when the user changes the percentage by dragging the bar between the children, or when a new child is added to the frame, but not when set-percentages is called.

Use get-percentages to find the current percentages.

(send a-panel:dragable set-percentages new-percentages)  void
  new-percentages : (listof number)
Call this method to set the percentages that each window takes up of the panel.

The argument, new-percentages must be a list of numbers that sums to 1. It’s length must be equal to the number of children of the panel (see get-children) and each percentage must correspond to a number of pixels that is equal to or larger than the minimum with of the child, as reported by min-width.
(send a-panel:dragable get-percentages)  (listof numbers)
Return the current percentages of the children.

(send a-panel:dragable get-vertical?)  boolean?
This method controls the behavior of the other overridden methods in mixins that implement this interface.

If it returns #t, the panel will be vertically aligned and if it returns #f, they will be horizontally aligned.

A panel that implements panel:vertical-dragable<%>. It aligns its children vertically.
A panel that implements panel:horizontal-dragable<%>. It aligns its children horizontally.
panel:dragable-mixin : (class? . -> . class?)
  argument extends/implements: window<%>
 area-container<%>
  result implements: panel:dragable<%>
This mixin adds the panel:dragable<%> functionality to a panel%.
It is not useful unless the get-vertical? method is overridden.

(send a-panel:dragable after-new-child child)  void
  child : (instance-of (is-a?/c area<%>))
Updates the number of percentages to make sure that it matches the number of children and calls after-percentage-change.
(send a-panel:dragable on-subwindow-event receiver    
  event)  boolean?
  receiver : (instanceof window<%>)
  event : (instanceof mouse-event%)
When the cursor is dragging the middle bar around, this method handles the resizing of the two panes.
(send a-panel:dragable place-children info 
  w 
  h) 
  (list-of (list exact-int exact-int exact-int exact-int))
  info : (list-of (list exact-int exact-int))
  w : exact-int
  h : exact-int
Places the children vertically in the panel, based on the percentages returned from get-percentages. Also leaves a little gap between each pair of children.
(send a-panel:dragable container-size info)  two
  info : list
Computes the minimum size the panel would have to be in order to have the current percentages (see get-percentages).

panel:vertical-dragable-mixin : (class? . -> . class?)
  argument extends/implements: panel:dragable<%>
  result implements: panel:vertical-dragable<%>
This mixin merely overrides the get-vertical? method of the panel:dragable-mixin to return #t.

(send a-panel:vertical-dragable get-vertical?)  boolean?
Returns #t.

panel:horizontal-dragable-mixin : (class? . -> . class?)
  argument extends/implements: panel:dragable<%>
  result implements: panel:vertical-dragable<%>
This mixin merely overrides the get-vertical? method of the panel:dragable-mixin to return #f.

(send a-panel:horizontal-dragable get-vertical?)  boolean?
Returns #f.