This is HandTileView.m in view mode; [Download] [Up]
/* Generated by Interface Builder */ #import "HandTileView.h" #import <assert.h> @implementation HandTileView + newFrame:( const NXRect * )frameRect { int i; self = [ super newFrame:frameRect ]; for( i = 0; i < ( sizeof( myHand ) / sizeof( CardView * )); ++i ) myHand[ i ] = nil; return self; } - addCard:( CardView * )aCard :sender { assert( !myHand[ 0 ] ); myHand[ 0 ] = aCard; [ self addSubview:[ aCard setEventsEnabled:reactiveCardsFlag ]]; return [ self _adjustCards ]; } - removeCard:( CardView * )aCard :sender { int i; assert([ aCard isDescendantOf:self ]); [ aCard removeFromSuperview ]; for( i = 0; i < ( sizeof( myHand ) / sizeof( CardView * )); ++i ) if( myHand[ i ] == aCard ) myHand[ i ] = nil; return [ self _adjustCards ]; } - _adjustCards { if( myHand[ 0 ] ) { int i, placementAdjust = 0; BOOL placeMoved = NO; NXRect cardBounds; NXCoord x_offset; // Try to move the card from the leftmost position // to another position in the hand. for( i = 1; !placeMoved && ( i < ( sizeof( myHand ) / sizeof( CardView * ))); ++i ) if( !myHand[ i ] ) { myHand[ i ] = myHand[ 0 ]; myHand[ 0 ] = nil; placementAdjust = i; placeMoved = YES; } // Wherever the card was moved to then calculate and // adjust its position. [ myHand[ placementAdjust ] getBounds:&cardBounds ]; x_offset = ( NX_WIDTH( &bounds ) / HAND_SIZE ) - NX_WIDTH( &cardBounds ); [ myHand[ placementAdjust ] moveTo:(( x_offset / 2 ) + (( x_offset + NX_WIDTH( &cardBounds )) * placementAdjust )) :(( NX_HEIGHT( &bounds ) - NX_HEIGHT( &cardBounds )) / 2 )]; } return self; } - sendCard:( CardView * )aCard to:anObject { assert([ aCard isDescendantOf:self ]); [ self removeCard:aCard :self ]; [ anObject addCard:aCard :self ]; return self; } - sendAllCardsTo:anObject { int i; for( i = 0; i < ( sizeof( myHand ) / sizeof( CardView * )); ++i ) if( myHand[ i ]) [ self sendCard:myHand[ i ] to:anObject ]; return self; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.