home *** CD-ROM | disk | FTP | other *** search
- #import "AutoWidthMatrix.h"
-
- @implementation AutoWidthMatrix
-
- - superviewSizeChanged:(const NXSize *) oldSize
- {
- [self sizeToSuperviewWidth];
- return self;
- }
-
- - sizeToSuperviewWidth
- {
- /* Matix instance variables used:
- NXSize cellSize
- NXSize intercell
- int numCols */
-
- NXRect r; /* superview's frame */
- float newWidth, newHeight;
-
- if (! [self superview]) return self;
-
- [[self superview] getFrame:&r];
-
- /* The matrix width will be the same as the superview's width. */
-
- newWidth = r.size.width;
-
- /* The matrix height is computed by multiplying the total height of one
- cell (this includes any intercell gap) by the number of rows.
-
- One intercell gap is subtracted because there is not intercell space
- before the first cell or after the last. (The other Matrix methods,
- SizeToFit and SizeTo, seem to also follow this rule.) */
-
- newHeight = numRows * (intercell.height + cellSize.height)
- - intercell.height;
-
- if (newHeight < 0.0) newHeight = 0.0;
-
- /* The cell width is computed so that the matrix columns fill up the
- available superview width. (If the superview width is small and the
- number of columns large, this will result in rather small cells.)
-
- The formula computes the space available for cells by taking the
- amount of width available, subtracting out the space required for
- intercell gaps, and dividing this between the number of columns.
- (One extra intercell gap is returned to the available space because
- the gaps are between cells, not at the end or beginning of cells.) */
-
- cellSize.width = (r.size.width - (intercell.width * numCols)
- + intercell.width) / numCols;
-
- [self sizeTo:newWidth :newHeight];
-
- return self;
- }
-
- @end
-