Source/BitHolder.h
author Jens Alfke <jens@mooseyard.com>
Mon Mar 10 17:32:04 2008 -0700 (2008-03-10)
changeset 2 7b0441db81e5
parent 0 e9f7ba4718e1
child 10 6c78cc6bd7a6
permissions -rw-r--r--
Oops, needed to fix an #include
jens@0
     1
/*  This code is based on Apple's "GeekGameBoard" sample code, version 1.0.
jens@0
     2
    http://developer.apple.com/samplecode/GeekGameBoard/
jens@0
     3
    Copyright © 2007 Apple Inc. Copyright © 2008 Jens Alfke. All Rights Reserved.
jens@0
     4
jens@0
     5
    Redistribution and use in source and binary forms, with or without modification, are permitted
jens@0
     6
    provided that the following conditions are met:
jens@0
     7
jens@0
     8
    * Redistributions of source code must retain the above copyright notice, this list of conditions
jens@0
     9
      and the following disclaimer.
jens@0
    10
    * Redistributions in binary form must reproduce the above copyright notice, this list of
jens@0
    11
      conditions and the following disclaimer in the documentation and/or other materials provided
jens@0
    12
      with the distribution.
jens@0
    13
jens@0
    14
    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
jens@0
    15
    IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
jens@0
    16
    FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRI-
jens@0
    17
    BUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
jens@0
    18
    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
jens@0
    19
    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
jens@0
    20
    CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF 
jens@0
    21
    THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
jens@0
    22
*/
jens@1
    23
#import "GGBLayer.h"
jens@0
    24
@class Bit;
jens@0
    25
jens@0
    26
jens@0
    27
/** Protocol for a layer that acts as a container for Bits. */
jens@0
    28
@protocol BitHolder <NSObject>
jens@0
    29
jens@0
    30
/** Current Bit, or nil if empty */
jens@0
    31
@property (retain) Bit* bit;
jens@0
    32
jens@0
    33
/** Conveniences for comparing self.bit with nil */
jens@0
    34
@property (readonly, getter=isEmpty) BOOL empty;
jens@0
    35
jens@0
    36
/** BitHolders will be highlighted while the target of a drag operation */
jens@0
    37
@property BOOL highlighted;
jens@0
    38
jens@0
    39
jens@0
    40
/** Tests whether the bit is allowed to be dragged out of me.
jens@0
    41
    Returns the input bit, or possibly a different Bit to drag instead, or nil if not allowed.
jens@0
    42
    Either -cancelDragBit: or -draggedBit:to: must be called next. */
jens@0
    43
- (Bit*) canDragBit: (Bit*)bit;
jens@0
    44
jens@0
    45
/** Cancels a pending drag (begun by -canDragBit:). */
jens@0
    46
- (void) cancelDragBit: (Bit*)bit;
jens@0
    47
jens@0
    48
/** Called after a drag finishes. */
jens@0
    49
- (void) draggedBit: (Bit*)bit to: (id<BitHolder>)dst;
jens@0
    50
jens@0
    51
jens@0
    52
/** Tests whether the bit is allowed to be dropped into me.
jens@0
    53
    Either -willNotDropBit: or -dropBit:atPoint: must be called next. */
jens@0
    54
- (BOOL) canDropBit: (Bit*)bit atPoint: (CGPoint)point;
jens@0
    55
jens@0
    56
/** Cancels a pending drop (after -canDropBit:atPoint: was already called.) */
jens@0
    57
- (void) willNotDropBit: (Bit*)bit;
jens@0
    58
jens@0
    59
/** Finishes a drop. */
jens@0
    60
- (BOOL) dropBit: (Bit*)bit atPoint: (CGPoint)point;
jens@0
    61
jens@0
    62
@end
jens@0
    63
jens@0
    64
jens@0
    65
/** A basic implementation of the BitHolder protocol. */
jens@1
    66
@interface BitHolder : GGBLayer <BitHolder>
jens@0
    67
{
jens@0
    68
    @protected
jens@0
    69
    Bit *_bit;
jens@0
    70
    BOOL _highlighted;
jens@0
    71
}
jens@0
    72
jens@0
    73
@end