Source/BitHolder.h
author Jens Alfke <jens@mooseyard.com>
Sat Jul 05 17:46:43 2008 -0700 (2008-07-05)
changeset 11 436cbdf56810
parent 1 3eb7be1dd7b6
child 12 4e567e11f45f
permissions -rw-r--r--
* Improved drag-and-drop (supports CandyBar)
* Fixed DiscPiece
* Inheritable layer styles
etc.
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@0
    42
jens@0
    43
/** Tests whether the bit is allowed to be dragged out of me.
jens@0
    44
    Returns the input bit, or possibly a different Bit to drag instead, or nil if not allowed.
jens@0
    45
    Either -cancelDragBit: or -draggedBit:to: must be called next. */
jens@0
    46
- (Bit*) canDragBit: (Bit*)bit;
jens@0
    47
jens@0
    48
/** Cancels a pending drag (begun by -canDragBit:). */
jens@0
    49
- (void) cancelDragBit: (Bit*)bit;
jens@0
    50
jens@0
    51
/** Called after a drag finishes. */
jens@0
    52
- (void) draggedBit: (Bit*)bit to: (id<BitHolder>)dst;
jens@0
    53
jens@0
    54
jens@0
    55
/** Tests whether the bit is allowed to be dropped into me.
jens@0
    56
    Either -willNotDropBit: or -dropBit:atPoint: must be called next. */
jens@0
    57
- (BOOL) canDropBit: (Bit*)bit atPoint: (CGPoint)point;
jens@0
    58
jens@0
    59
/** Cancels a pending drop (after -canDropBit:atPoint: was already called.) */
jens@0
    60
- (void) willNotDropBit: (Bit*)bit;
jens@0
    61
jens@0
    62
/** Finishes a drop. */
jens@0
    63
- (BOOL) dropBit: (Bit*)bit atPoint: (CGPoint)point;
jens@0
    64
jens@0
    65
@end
jens@0
    66
jens@0
    67
jens@0
    68
/** A basic implementation of the BitHolder protocol. */
jens@1
    69
@interface BitHolder : GGBLayer <BitHolder>
jens@0
    70
{
jens@0
    71
    @protected
jens@0
    72
    Bit *_bit;
jens@0
    73
    BOOL _highlighted;
jens@0
    74
}
jens@0
    75
jens@0
    76
@end