Collapse/Expand: IGoCollapsible

Version 2.3 generalizes the notion of expanding and collapsing by adding the IGoCollapsible interface and the GoCollapsibleHandle class. (Not in GoExpress.)
IGoCollapsible defines two methods, Collapse and Expand, and two properties, Collapsible, and IsExpanded. GoSubGraph, of course, implements this interface, but other GoObject classes can too. An example is the TreeAppNode in the TreeApp sample.

GoCollapsibleHandle provides a standard implementation of the +/- rectangle that users can click to perform a Collapse or an Expand. GoSubGraphHandle now inherits from this class, solely to customize the OnSingleClick behavior.

I forgot to mention another example use of IGoCollapsible and GoCollapsibleHandle: the CollapsibleListGroup class in Demo1 of version 2.3.
This shows two copies of the same CollapsibleListGroup: one collapsed, one expanded.

This class is implemented as a GoGroup that contains two child objects (actually both are GoListGroups and the second one is presumed to be larger than the first one), and expanding/collapsing just changes the GoObject.Visible and GoObject.Printable properties of those two children.
You might use this as part of a node class, or perhaps as the MidLabel of a GoLabeledLink. Note that as a group rather than as a node, there are no ports in a CollapsibleListGroup.