Copyright ©1995 by NeXT Computer, Inc.  All Rights Reserved.

Box



Inherits From: View : Responder : Object
Declared In: appkit/Box.h



Class Description

A Box object is a simple View that can do two things:  It can draw a border around itself and it can title itself.  You use a Box to group, visually, some number of other Views.  These other Views are added to the Box through the typical subview-adding methods, such as addSubview: and replaceSubview:with:.

A Box contains a content area, a rectangle set within the Box's frame in which the Box's subviews are displayed.  The size and location of the content area depends on the Box's border type, title location, the size of the font used to draw the title, and an additional measure that you can set through the setOffsets:: method.  When you create a Box, a instance of View is created and added (as a subview of the Box object) to fill the Box's content area.  If you replace this content view with a View of your own, your View will be resized to fit the content area.  Similarly, as you resize a Box its content view is automatically resized to fill the content area.

The Views that you add as subviews to a Box are actually added to the Box's content view--View's subview-adding methods are redefined by Box to ensure that a subview is correctly placed in the view hierarchy.  However, you should note that the subviews method isn't redefined:  It returns a List containing a single object, the Box's content view.



Instance Variables

id cell;

id contentView;

NXSize offsets;

NXRect borderRect;

NXRect titleRect;

struct _bFlags {
unsigned int borderType:2;
unsigned int titlePosition:3;
} bFlags;


cell The cell that draws the Box's title.
contentView The Views that fills the Box's content area.
offsets Offsets of the content view from the Box's border.
borderRect The Box's border rectangle.
titleRect The rectangle in which the title cell is drawn.
bFlags.borderType A constant describing the Box's border type.
bFlags.titlePosition A constant describing the position of the Box's title.



Method Types

Initializing and freeing initFrame:
free
Setting the border and title setBorderType:
borderType
setTitlePosition:
titlePosition
setTitle:
title
setFont:
font
cell
Setting and placing the content view
setContentView:
contentView
setOffsets::
getOffsets:
Putting Views in the Box addSubview:
replaceSubview:with:
Resizing the Box setFrameFromContentFrame:
sizeTo::
sizeToFit
Drawing the Box drawSelf::
Archiving awake
read:
write:



Instance Methods

addSubview:
addSubview:aView

Adds aView to the Box.  This is done by forwarding the addSubview:aView message to the Box's content view.  Note that this means aView's location and size are reckoned within the content view's coordinate system. After invoking this method, you should send the Box a sizeToFit message.  Returns self.



awake
awake

Lays out the Box during the unarchiving process so that it can be displayed.  You should never invoke this method directly.



borderType
(int)borderType

Returns the Box's border type, one of NX_LINE, NX_GROOVE, NX_BEZEL, or NX_NOBORDER.  By default, a Box's border type is NX_GROOVE.

See also:  setBorderType:



cell
cell

Returns the cell used to display the Box's title.



contentView
contentView

Returns the Box's content view.  The content view is created automatically when the Box is created, and resized as the Box is resized (you should never send frame-altering messages directly to a Box's content view).  You can replace it with a View of your own through the setContentView: method.

See also:  setContentView:



drawSelf::
drawSelf:(const NXRect *)rects :(int)rectCount

Fills the Box's background with opaque, light gray (NX_LTGRAY) paint, then draws the object's title, border, and its subviews (you can't change the background color short of creating your own Box subclass).  You never invoke this method directly; it's invoked by the display methods inherited from the View class.  Returns self.



font
font

Returns the Font object used to draw the Box's title.  By default, the Font is the 12.0 point system font (NXSystemFont).

See also:  setFont:



free
free

Frees the Box and all its subviews.



getOffsets:
getOffsets:(NXSize *)theSize

Returns, by reference in theSize, the horizontal and vertical distances between the Box's border and its content area, measured in the Box's coordinate system.  The default is 5.0 in both dimensions.  Returns self.

See also:  setOffsets::



initFrame:
initFrame:(const NXRect *)frameRect

The designated initializer for the Box class, this method initializes the Box with the following values:

Attribute Value
frame frameRect
title "Title"
border type NX_RIDGE
title position NX_ATTOP
font 12.0 point NXSystemFont
offsets 5.0 in both dimensions

In addition, the Box's content view is automatically created and added as the Box's single subview, and the Box identifies itself as an opaque View.  Returns self.



read:
read:(NXTypedStream *)stream

Reads the Box from the typed stream stream.  Returns self.

See also:  write:



replaceSubview:with:
replaceSubview:oldView with:newView

Replace oldView with newView in the subview list of the Box's content view.  This method does nothing and returns nil if oldView isn't a subview of the content view or if newView isn't a View.  Otherwise, this method returns oldView.

See also:  addSubview:



setBorderType:
setBorderType:(int)aType

Sets the border type to aType, which must be NX_LINE, NX_GROOVE, NX_BEZEL, or NX_NOBORDER (a Box's default border type is NX_GROOVE).  If the size of the new border is different from that of the old border, the content view is resized to absorb the difference.  The Box isn't redisplayed.  Returns self.

See also:  borderType



setContentView:
setContentView:aView

Sets the Box's content view to aView, resizing the View to fit within the Box's current content area.  The old content view is returned.

See also:  contentView



setFont:
setFont:fontObj

Sets fontObj as the Font object used to draw the Box's title.  By default, the title is drawn using the 12.0 point system font (NXSystemFont).  If the size of the new Font is different from that of the old Font, the content view is resized to absorb the difference.  The Box isn't redisplayed.  Returns self.

See also:  + newFont:size: (Font)



setFrameFromContentFrame:
setFrameFromContentFrame:(const NXRect *)contentFrame

Places the Box so its content view lies on contentFrame, reckoned in the coordinate system of the Box's superview.  Returns self.

See also:  setOffsets::, setFrame: (View)



setOffsets::
setOffsets:(NXCoord)horizontal :(NXCoord)vertical

Sets the horizontal and vertical distance between the border of the Box and its content view.  The horizontal value is applied (reckoned in the Box's coordinate system) fully and equally to the left and right sides of the Box.  The vertical value is similarly applied to the top and bottom.  Returns self

Unlike changing a Box's other attributes, such as its title position or border type, changing the offsets doesn't automatically resize the content view.  In general, you should send a sizeToFit message to the Box after changing the size of its offsets.  This causes the content view to remain unchanged while the Box is wrapped around it.



setTitle:
setTitle:(const char *)aString

Sets the title to aString.  By default, a Box's title is "Title".  After invoking this method you should send a sizeToFit message to the Box to ensure that it's wide enough to accommodate the length of the title.  Returns self.

See also:  title, setFont:



setTitlePosition:
setTitlePosition:(int)aPosition

Sets the title position to aPosition, which can be one of the values listed in the following table.  The default position is NX_ATTOP.

Value Meaning
NX_NOTITLE The Box has no title
NX_ABOVETOP Title positioned above the Box's top border
NX_ATTOP Title positioned within the Box's top border
NX_BELOWTOP Title positioned below the Box's top border
NX_ABOVEBOTTOM Title positioned above the Box's bottom border
NX_ATBOTTOM Title positioned within the Box's bottom border
NX_BELOWBOTTOM Title positioned below the Box's bottom border

If the new title position changes the size of the Box's border area, the content view is resized to absorb the difference.  The Box isn't redisplayed.  Returns self.

See also:  getTitlePosition:



sizeTo::
sizeTo:(NXCoord)width :(NXCoord)height

Resizes the Box to width and height.  The Box's content view is resized accordingly; if the new width or height of the Box leaves no room for the content view (after subtracting the room needed to accommodate the border, title, and offsets), the respective dimension of the content view will be zero.  Returns self.



sizeToFit
sizeToFit

Resizes and moves the Box's content view so that it just encloses its subviews.  The Box itself is then moved and resized to wrap around the content view.  The Box's width is constrained so its title will be fully displayed.

You should invoke this method after:

Adding a subview (to the content view).
Altering the size or location of such a subview.
Setting the Box's offsets.
Setting the Box's title.

The mechanism by which the content view is moved and resized depends on whether the object responds to its own sizeToFit message:  If it does respond, then that message is sent and the content view is expected to be so modified.  If the content view doesn't respond, the Box moves and resizes the content view itself.

Returns self.



title
(const char *)title

Returns the Box's title.  By default, a Box's title is "Title".

See also:  setTitle:



titlePosition
(int)titlePosition

Returns a constant representing the title position.  See the description of setTitlePosition: for a list of the title position constants.

See also:  setTitlePosition:



write:
write:(NXTypedStream *)stream

Writes the Box to the typed stream stream.  Returns self.

See also:  read: