|ANSI Exception Extensions||
The ANSI Exception project implements an exception handling system that conforms
The project integrates seamlessly with ST/MT version 2.5.
"T-gen is a general-purpose object-oriented tool for the automatic generation of string-to-object translators. It is written in Smalltalk and lives in the Smalltalk programming environment. T-gen supports the generation of both top-down (LL) and bottom-up (LR) parsers, which will automatically generate derivation trees, abstract syntax trees, or arbitrary Smalltalk objects. The simple specification syntax and graphical user interface enhance the learning, comprehension, and usefulness of T-gen." (Abstract of original T-gen users guide.)
|Extensions and Utilities||
Sometimes it is worthwhile to subclass OrderedCollection and to add new instance
variables to the subclasses. In this case, you will want to be
able to inspect the instance variables of instances of those subclasses. The stock OrderedCollectionInspector, however, only inspects the contents of
the instance, not its instance variables. So here is an enhancement to OrderedCollectionInspector which not only inspects the contents of an
instance, but also inspects any added instance variables. (You can also add, edit, and delete elements, and change instance variable contents.)
OrderedCollection has 3 instance variables itself (m_contents, m_startPos, m_endPos), and there is normally no reason to inspect these, so
the enhanced OrderedCollectionInspector continues to ignore them. Likewise, SortedCollection has an additional instance variable (m_sortBlock),
which is also ignored. The enhanced OrderedCollectionInspector, however, inspects any additional instances. It knows how many instance variables
to ignore by sending the message #basicVariables to the inspected object. #basicVariables is defined for OrderedCollection as ^3 and for
SortedCollection as ^4. Redefine these as necessary for subclasses to ignore instance variables you don't wish to inspect
Added instance variables in subclasses appear in the inspector after 'self' and before the listing of the elements.
SplitPane allows you to specify a minimum position (top and/or bottom for
horizontal split bars, and left and/or right for vertical split bars) below which the
split disappears. In some applications, however, you might want the split bar never to
disappear, and to maintain a minimum distance from the edge(s) of its parent window. This
would be the case if you use a split between two panes that must always be displayed.
This enhancement extends the m_minInfo parameter to allow specifying either a minimum position below which the split disappears or a minimum position below which the split cannot be moved. These two concepts are mutually exclusive, but each of the 4 extremities (top, bottom, left, and right) can be specified independently, so you can mix them together. For example, a vertical split bar between a left pane and a right pane can be specified so that at least some minimum of the left pane always shows, but if the bar is moved past a certain point to the right it disappears to show only the left pane.
The extension works by allowing negative values of the m_minInfo parameter. Positive values of the m_minInfo parameters are as currently supported (split bars moved below these minimums vanish). Negative values of the m_minInfo paramters place limits on how close the split bar may be moved to its respective edge.
For example, in the #initWindow method of the parent, you would include code like:
| split |
(split := SplitPane new)
leftPanes: (Array with: ... ) rightPanes: (Array with: ... );
position: ... ;
... . etc.
left: -200; "Negative => split bar stays at least 200 units from left"
right: 100. "Positive => split bar disappears if moved within 100 units from right"
The split limits are enforced when the user tries to drag the split beyond the limit or when the parent window is resized and one of the sides would be moved closer to a split bar than permitted.