Source/BitHolder.h
author snej@snej.local
Tue Mar 10 22:36:23 2009 -0700 (2009-03-10)
changeset 27 b0affce7beb1
parent 10 6c78cc6bd7a6
permissions -rw-r--r--
Fixed some problems reported by the CLANG static analyzer.
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@10
    33
/** Sets current Bit to nil, triggering its "destroy" animation */
jens@10
    34
- (void) destroyBit;
jens@10
    35
jens@0
    36
/** Conveniences for comparing self.bit with nil */
jens@0
    37
@property (readonly, getter=isEmpty) BOOL empty;
jens@0
    38
jens@0
    39
/** BitHolders will be highlighted while the target of a drag operation */
jens@0
    40
@property BOOL highlighted;
jens@0
    41
jens@12
    42
/** An uninterpreted integer that the Game can use for its own purposes. */
jens@12
    43
@property NSInteger tag;
jens@12
    44
jens@0
    45
jens@0
    46
/** Tests whether the bit is allowed to be dragged out of me.
jens@0
    47
    Returns the input bit, or possibly a different Bit to drag instead, or nil if not allowed.
jens@0
    48
    Either -cancelDragBit: or -draggedBit:to: must be called next. */
jens@0
    49
- (Bit*) canDragBit: (Bit*)bit;
jens@0
    50
jens@0
    51
/** Cancels a pending drag (begun by -canDragBit:). */
jens@0
    52
- (void) cancelDragBit: (Bit*)bit;
jens@0
    53
jens@0
    54
/** Called after a drag finishes. */
jens@0
    55
- (void) draggedBit: (Bit*)bit to: (id<BitHolder>)dst;
jens@0
    56
jens@0
    57
jens@0
    58
/** Tests whether the bit is allowed to be dropped into me.
jens@0
    59
    Either -willNotDropBit: or -dropBit:atPoint: must be called next. */
jens@0
    60
- (BOOL) canDropBit: (Bit*)bit atPoint: (CGPoint)point;
jens@0
    61
jens@0
    62
/** Cancels a pending drop (after -canDropBit:atPoint: was already called.) */
jens@0
    63
- (void) willNotDropBit: (Bit*)bit;
jens@0
    64
jens@0
    65
/** Finishes a drop. */
jens@0
    66
- (BOOL) dropBit: (Bit*)bit atPoint: (CGPoint)point;
jens@0
    67
jens@0
    68
@end
jens@0
    69
jens@0
    70
jens@0
    71
/** A basic implementation of the BitHolder protocol. */
jens@1
    72
@interface BitHolder : GGBLayer <BitHolder>
jens@0
    73
{
jens@0
    74
    @protected
jens@0
    75
    Bit *_bit;
jens@0
    76
    BOOL _highlighted;
jens@12
    77
    NSInteger _tag;
jens@0
    78
}
jens@0
    79
jens@0
    80
@end