Skip to content

Commit

Permalink
Add a new cell class for the source view items
Browse files Browse the repository at this point in the history
The new cell handles:
    - showing contextual menus
    - drawing a badge for the checked out branch

Needed to add the reference to the ref controller to the history controller.
  • Loading branch information
brotherbard committed Mar 14, 2010
1 parent 64f4276 commit 90f80f0
Show file tree
Hide file tree
Showing 11 changed files with 285 additions and 18 deletions.
12 changes: 12 additions & 0 deletions GitX.xcodeproj/project.pbxproj
Expand Up @@ -50,6 +50,8 @@
D8083DC4111F90F300337480 /* PBCloneRepsitoryToSheet.m in Sources */ = {isa = PBXBuildFile; fileRef = D8083DC3111F90F300337480 /* PBCloneRepsitoryToSheet.m */; }; D8083DC4111F90F300337480 /* PBCloneRepsitoryToSheet.m in Sources */ = {isa = PBXBuildFile; fileRef = D8083DC3111F90F300337480 /* PBCloneRepsitoryToSheet.m */; };
D8083DCD111F918900337480 /* PBCloneRepsitoryToSheet.xib in Resources */ = {isa = PBXBuildFile; fileRef = D8083DCB111F918900337480 /* PBCloneRepsitoryToSheet.xib */; }; D8083DCD111F918900337480 /* PBCloneRepsitoryToSheet.xib in Resources */ = {isa = PBXBuildFile; fileRef = D8083DCB111F918900337480 /* PBCloneRepsitoryToSheet.xib */; };
D8083E03111FA33700337480 /* PBCloneRepositoryPanel.m in Sources */ = {isa = PBXBuildFile; fileRef = D8083E02111FA33700337480 /* PBCloneRepositoryPanel.m */; }; D8083E03111FA33700337480 /* PBCloneRepositoryPanel.m in Sources */ = {isa = PBXBuildFile; fileRef = D8083E02111FA33700337480 /* PBCloneRepositoryPanel.m */; };
D828A40D1127B18700F09D11 /* PBSourceViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = D828A40C1127B18700F09D11 /* PBSourceViewCell.m */; };
D828A4111127B1C400F09D11 /* PBSourceViewBadge.m in Sources */ = {isa = PBXBuildFile; fileRef = D828A4101127B1C400F09D11 /* PBSourceViewBadge.m */; };
D8357535112640F100DE249D /* PBRemoteProgressSheet.xib in Resources */ = {isa = PBXBuildFile; fileRef = D8C1B77110E875CF009B7F8B /* PBRemoteProgressSheet.xib */; }; D8357535112640F100DE249D /* PBRemoteProgressSheet.xib in Resources */ = {isa = PBXBuildFile; fileRef = D8C1B77110E875CF009B7F8B /* PBRemoteProgressSheet.xib */; };
D854948610D5C01B0083B917 /* PBCreateBranchSheet.m in Sources */ = {isa = PBXBuildFile; fileRef = D854948510D5C01B0083B917 /* PBCreateBranchSheet.m */; }; D854948610D5C01B0083B917 /* PBCreateBranchSheet.m in Sources */ = {isa = PBXBuildFile; fileRef = D854948510D5C01B0083B917 /* PBCreateBranchSheet.m */; };
D85810551127476E007F254B /* StageView.png in Resources */ = {isa = PBXBuildFile; fileRef = D85810541127476E007F254B /* StageView.png */; }; D85810551127476E007F254B /* StageView.png in Resources */ = {isa = PBXBuildFile; fileRef = D85810541127476E007F254B /* StageView.png */; };
Expand Down Expand Up @@ -248,6 +250,10 @@
D8083E01111FA33700337480 /* PBCloneRepositoryPanel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBCloneRepositoryPanel.h; sourceTree = "<group>"; }; D8083E01111FA33700337480 /* PBCloneRepositoryPanel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBCloneRepositoryPanel.h; sourceTree = "<group>"; };
D8083E02111FA33700337480 /* PBCloneRepositoryPanel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBCloneRepositoryPanel.m; sourceTree = "<group>"; }; D8083E02111FA33700337480 /* PBCloneRepositoryPanel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBCloneRepositoryPanel.m; sourceTree = "<group>"; };
D823487410CB382C00944BDE /* Terminal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Terminal.h; sourceTree = "<group>"; }; D823487410CB382C00944BDE /* Terminal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Terminal.h; sourceTree = "<group>"; };
D828A40B1127B18700F09D11 /* PBSourceViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBSourceViewCell.h; sourceTree = "<group>"; };
D828A40C1127B18700F09D11 /* PBSourceViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBSourceViewCell.m; sourceTree = "<group>"; };
D828A40F1127B1C400F09D11 /* PBSourceViewBadge.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBSourceViewBadge.h; sourceTree = "<group>"; };
D828A4101127B1C400F09D11 /* PBSourceViewBadge.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBSourceViewBadge.m; sourceTree = "<group>"; };
D854948410D5C01B0083B917 /* PBCreateBranchSheet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBCreateBranchSheet.h; sourceTree = "<group>"; }; D854948410D5C01B0083B917 /* PBCreateBranchSheet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBCreateBranchSheet.h; sourceTree = "<group>"; };
D854948510D5C01B0083B917 /* PBCreateBranchSheet.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBCreateBranchSheet.m; sourceTree = "<group>"; }; D854948510D5C01B0083B917 /* PBCreateBranchSheet.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBCreateBranchSheet.m; sourceTree = "<group>"; };
D854949310D5C3E20083B917 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/PBCreateBranchSheet.xib; sourceTree = "<group>"; }; D854949310D5C3E20083B917 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/PBCreateBranchSheet.xib; sourceTree = "<group>"; };
Expand Down Expand Up @@ -727,6 +733,10 @@
children = ( children = (
F58DB55710566D3500CFDF4A /* PBGitSidebarController.h */, F58DB55710566D3500CFDF4A /* PBGitSidebarController.h */,
F58DB55810566D3500CFDF4A /* PBGitSidebarController.m */, F58DB55810566D3500CFDF4A /* PBGitSidebarController.m */,
D828A40B1127B18700F09D11 /* PBSourceViewCell.h */,
D828A40C1127B18700F09D11 /* PBSourceViewCell.m */,
D828A40F1127B1C400F09D11 /* PBSourceViewBadge.h */,
D828A4101127B1C400F09D11 /* PBSourceViewBadge.m */,
D8FDDA58114335B0005647F6 /* Source View Items */, D8FDDA58114335B0005647F6 /* Source View Items */,
); );
name = Sidebar; name = Sidebar;
Expand Down Expand Up @@ -1119,6 +1129,8 @@
D8FDDA6F114335E8005647F6 /* PBGitSVStageItem.m in Sources */, D8FDDA6F114335E8005647F6 /* PBGitSVStageItem.m in Sources */,
D8FDDA70114335E8005647F6 /* PBGitSVTagItem.m in Sources */, D8FDDA70114335E8005647F6 /* PBGitSVTagItem.m in Sources */,
D8A4BB6F11337D5C00E92D51 /* PBGitGradientBarView.m in Sources */, D8A4BB6F11337D5C00E92D51 /* PBGitGradientBarView.m in Sources */,
D828A40D1127B18700F09D11 /* PBSourceViewCell.m in Sources */,
D828A4111127B1C400F09D11 /* PBSourceViewBadge.m in Sources */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
Expand Down
3 changes: 3 additions & 0 deletions PBGitHistoryController.h
Expand Up @@ -14,8 +14,10 @@


@class PBGitSidebarController; @class PBGitSidebarController;
@class PBGitGradientBarView; @class PBGitGradientBarView;
@class PBRefController;


@interface PBGitHistoryController : PBViewController { @interface PBGitHistoryController : PBViewController {
IBOutlet PBRefController *refController;
IBOutlet NSSearchField *searchField; IBOutlet NSSearchField *searchField;
IBOutlet NSArrayController* commitController; IBOutlet NSArrayController* commitController;
IBOutlet NSTreeController* treeController; IBOutlet NSTreeController* treeController;
Expand All @@ -38,6 +40,7 @@
@property (retain) PBGitCommit *webCommit, *rawCommit; @property (retain) PBGitCommit *webCommit, *rawCommit;
@property (retain) PBGitTree* gitTree; @property (retain) PBGitTree* gitTree;
@property (readonly) NSArrayController *commitController; @property (readonly) NSArrayController *commitController;
@property (readonly) PBRefController *refController;


- (IBAction) setDetailedView: sender; - (IBAction) setDetailedView: sender;
- (IBAction) setRawView: sender; - (IBAction) setRawView: sender;
Expand Down
2 changes: 1 addition & 1 deletion PBGitHistoryController.m
Expand Up @@ -20,7 +20,7 @@




@implementation PBGitHistoryController @implementation PBGitHistoryController
@synthesize selectedTab, webCommit, rawCommit, gitTree, commitController; @synthesize selectedTab, webCommit, rawCommit, gitTree, commitController, refController;


- (void)awakeFromNib - (void)awakeFromNib
{ {
Expand Down
14 changes: 11 additions & 3 deletions PBGitHistoryView.xib
Expand Up @@ -1643,6 +1643,14 @@
</object> </object>
<int key="connectionID">328</int> <int key="connectionID">328</int>
</object> </object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">refController</string>
<reference key="source" ref="1001"/>
<reference key="destination" ref="892732705"/>
</object>
<int key="connectionID">329</int>
</object>
</object> </object>
<object class="IBMutableOrderedSet" key="objectRecords"> <object class="IBMutableOrderedSet" key="objectRecords">
<object class="NSArray" key="orderedObjects"> <object class="NSArray" key="orderedObjects">
Expand Down Expand Up @@ -2263,7 +2271,7 @@
</object> </object>
</object> </object>
<nil key="sourceID"/> <nil key="sourceID"/>
<int key="maxID">328</int> <int key="maxID">329</int>
</object> </object>
<object class="IBClassDescriber" key="IBDocument.Classes"> <object class="IBClassDescriber" key="IBDocument.Classes">
<object class="NSMutableArray" key="referencedPartialClassDescriptions"> <object class="NSMutableArray" key="referencedPartialClassDescriptions">
Expand Down Expand Up @@ -2366,6 +2374,7 @@
<string>commitList</string> <string>commitList</string>
<string>fileBrowser</string> <string>fileBrowser</string>
<string>historySplitView</string> <string>historySplitView</string>
<string>refController</string>
<string>scopeBarView</string> <string>scopeBarView</string>
<string>searchField</string> <string>searchField</string>
<string>treeController</string> <string>treeController</string>
Expand All @@ -2378,6 +2387,7 @@
<string>NSTableView</string> <string>NSTableView</string>
<string>NSOutlineView</string> <string>NSOutlineView</string>
<string>PBCollapsibleSplitView</string> <string>PBCollapsibleSplitView</string>
<string>PBRefController</string>
<string>PBGitGradientBarView</string> <string>PBGitGradientBarView</string>
<string>NSSearchField</string> <string>NSSearchField</string>
<string>NSTreeController</string> <string>NSTreeController</string>
Expand Down Expand Up @@ -2458,7 +2468,6 @@
<string>pushDefaultRemoteForRef:</string> <string>pushDefaultRemoteForRef:</string>
<string>pushToRemote:</string> <string>pushToRemote:</string>
<string>pushUpdatesToRemote:</string> <string>pushUpdatesToRemote:</string>
<string>rebaseActiveBranch:</string>
<string>rebaseHeadBranch:</string> <string>rebaseHeadBranch:</string>
<string>showTagInfoSheet:</string> <string>showTagInfoSheet:</string>
</object> </object>
Expand All @@ -2478,7 +2487,6 @@
<string>PBRefMenuItem</string> <string>PBRefMenuItem</string>
<string>PBRefMenuItem</string> <string>PBRefMenuItem</string>
<string>PBRefMenuItem</string> <string>PBRefMenuItem</string>
<string>PBRefMenuItem</string>
</object> </object>
</object> </object>
<object class="NSMutableDictionary" key="outlets"> <object class="NSMutableDictionary" key="outlets">
Expand Down
2 changes: 2 additions & 0 deletions PBGitSidebarController.h
Expand Up @@ -31,5 +31,7 @@
- (void) selectStage; - (void) selectStage;
- (void) selectCurrentBranch; - (void) selectCurrentBranch;


- (NSMenu *) menuForRow:(NSInteger)row;

@property(readonly) NSMutableArray *items; @property(readonly) NSMutableArray *items;
@end @end
34 changes: 33 additions & 1 deletion PBGitSidebarController.m
Expand Up @@ -10,6 +10,8 @@
#import "PBSourceViewItems.h" #import "PBSourceViewItems.h"
#import "PBGitHistoryController.h" #import "PBGitHistoryController.h"
#import "PBGitCommitController.h" #import "PBGitCommitController.h"
#import "PBRefController.h"
#import "PBSourceViewCell.h"
#import "NSOutlineViewExt.h" #import "NSOutlineViewExt.h"


@interface PBGitSidebarController () @interface PBGitSidebarController ()
Expand Down Expand Up @@ -127,8 +129,10 @@ - (BOOL)outlineView:(NSOutlineView *)outlineView isGroupItem:(id)item
return [item isGroupItem]; return [item isGroupItem];
} }


- (void)outlineView:(NSOutlineView *)outlineView willDisplayCell:(id)cell forTableColumn:(NSTableColumn *)tableColumn item:(id)item - (void)outlineView:(NSOutlineView *)outlineView willDisplayCell:(PBSourceViewCell *)cell forTableColumn:(NSTableColumn *)tableColumn item:(PBSourceViewItem *)item
{ {
cell.isCheckedOut = [item.revSpecifier isEqualTo:[repository headRef]];

[cell setImage:[item icon]]; [cell setImage:[item icon]];
} }


Expand Down Expand Up @@ -204,4 +208,32 @@ - (id)outlineView:(NSOutlineView *)outlineView objectValueForTableColumn:(NSTabl
return [(PBSourceViewItem *)item title]; return [(PBSourceViewItem *)item title];
} }



#pragma mark Menus

- (NSMenu *) menuForRow:(NSInteger)row
{
PBSourceViewItem *viewItem = [sourceView itemAtRow:row];

PBGitRef *ref = nil;

// create a ref for a remote because they don't store one
if ([self outlineView:sourceView isItemExpandable:viewItem] && (viewItem.parent == remotes))
ref = [PBGitRef refFromString:[kGitXRemoteRefPrefix stringByAppendingString:[viewItem title]]];
else
ref = [[viewItem revSpecifier] ref];

if (!ref)
return nil;

NSArray *menuItems = [historyViewController.refController menuItemsForRef:ref];

NSMenu *menu = [[NSMenu alloc] init];
[menu setAutoenablesItems:NO];
for (NSMenuItem *item in menuItems)
[menu addItem:item];

return menu;
}

@end @end
22 changes: 9 additions & 13 deletions PBGitSidebarView.xib
Expand Up @@ -340,7 +340,7 @@
<string>com.apple.InterfaceBuilder.CocoaPlugin</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>PBIconAndTextCell</string> <string>PBSourceViewCell</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>{{482, 590}, {153, 354}}</string> <string>{{482, 590}, {153, 354}}</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
Expand Down Expand Up @@ -406,13 +406,17 @@
<string key="minorKey">PBIconAndTextCell.h</string> <string key="minorKey">PBIconAndTextCell.h</string>
</object> </object>
</object> </object>
<object class="IBPartialClassDescription">
<string key="className">PBSourceViewCell</string>
<string key="superclassName">PBIconAndTextCell</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">PBSourceViewCell.h</string>
</object>
</object>
<object class="IBPartialClassDescription"> <object class="IBPartialClassDescription">
<string key="className">PBViewController</string> <string key="className">PBViewController</string>
<string key="superclassName">NSViewController</string> <string key="superclassName">NSViewController</string>
<object class="NSMutableDictionary" key="outlets">
<string key="NS.key.0">viewToolbar</string>
<string key="NS.object.0">NSToolbar</string>
</object>
<object class="IBClassDescriptionSource" key="sourceIdentifier"> <object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string> <string key="majorKey">IBProjectSource</string>
<string key="minorKey">PBViewController.h</string> <string key="minorKey">PBViewController.h</string>
Expand Down Expand Up @@ -889,14 +893,6 @@
<string key="minorKey">AppKit.framework/Headers/NSTextFieldCell.h</string> <string key="minorKey">AppKit.framework/Headers/NSTextFieldCell.h</string>
</object> </object>
</object> </object>
<object class="IBPartialClassDescription">
<string key="className">NSToolbar</string>
<string key="superclassName">NSObject</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBFrameworkSource</string>
<string key="minorKey">AppKit.framework/Headers/NSToolbar.h</string>
</object>
</object>
<object class="IBPartialClassDescription"> <object class="IBPartialClassDescription">
<string key="className">NSView</string> <string key="className">NSView</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier"> <object class="IBClassDescriptionSource" key="sourceIdentifier">
Expand Down
19 changes: 19 additions & 0 deletions PBSourceViewBadge.h
@@ -0,0 +1,19 @@
//
// PBSourceViewBadge.h
// GitX
//
// Created by Nathan Kinsinger on 2/13/10.
// Copyright 2010 Nathan Kinsinger. All rights reserved.
//

#import <Cocoa/Cocoa.h>


@interface PBSourceViewBadge : NSObject {

}

+ (NSImage *) checkedOutBadgeForCell:(NSTextFieldCell *)cell;
+ (NSImage *) numericBadge:(NSInteger)number forCell:(NSTextFieldCell *)cell;

@end
121 changes: 121 additions & 0 deletions PBSourceViewBadge.m
@@ -0,0 +1,121 @@
//
// PBSourceViewBadge.m
// GitX
//
// Created by Nathan Kinsinger on 2/13/10.
// Copyright 2010 Nathan Kinsinger. All rights reserved.
//

#import "PBSourceViewBadge.h"
#import "PBSourceViewCell.h"


@implementation PBSourceViewBadge


+ (NSColor *) badgeHighlightColor
{
return [NSColor colorWithCalibratedHue:0.612 saturation:0.275 brightness:0.735 alpha:1.000];
}


+ (NSColor *) badgeBackgroundColor
{
return [NSColor colorWithCalibratedWhite:0.6 alpha:1.00];
}


+ (NSColor *) badgeColorForCell:(NSTextFieldCell *)cell
{
if ([cell isHighlighted])
return [NSColor whiteColor];

if ([[[cell controlView] window] isMainWindow])
return [self badgeHighlightColor];

return [self badgeBackgroundColor];
}


+ (NSColor *) badgeTextColorForCell:(NSTextFieldCell *)cell
{
if (![cell isHighlighted])
return [NSColor whiteColor];

if (![[[cell controlView] window] isKeyWindow])
if ([[[cell controlView] window] isMainWindow])
return [self badgeHighlightColor];
else
return [self badgeBackgroundColor];

if ([[[cell controlView] window] firstResponder] == [cell controlView])
return [self badgeHighlightColor];

return [self badgeBackgroundColor];
}


+ (NSMutableDictionary *) badgeTextAttributes
{
NSMutableDictionary *badgeTextAttributes = nil;
if (!badgeTextAttributes) {
NSMutableParagraphStyle *centerStyle = [[NSMutableParagraphStyle alloc] init];
[centerStyle setAlignment:NSCenterTextAlignment];

badgeTextAttributes = [NSMutableDictionary dictionary];
[badgeTextAttributes setObject:[NSFont fontWithName:@"Helvetica-Bold" size:[NSFont systemFontSize] - 2] forKey:NSFontAttributeName];
[badgeTextAttributes setObject:centerStyle forKey:NSParagraphStyleAttributeName];
}

return badgeTextAttributes;
}



#pragma mark -
#pragma mark badges

+ (NSImage *) badge:(NSString *)badge forCell:(NSTextFieldCell *)cell
{
NSColor *badgeColor = [self badgeColorForCell:cell];

NSColor *textColor = [self badgeTextColorForCell:cell];
NSMutableDictionary *badgeTextAttributes = [self badgeTextAttributes];
[badgeTextAttributes setObject:textColor forKey:NSForegroundColorAttributeName];
NSAttributedString *badgeString = [[NSAttributedString alloc] initWithString:badge attributes:badgeTextAttributes];

float imageHeight = ceilf([badgeString size].height);
float radius = ceilf(imageHeight / 4) * 2;
float minWidth = ceilf(radius * 2.5);

float imageWidth = ceilf([badgeString size].width + radius);
if (imageWidth < minWidth)
imageWidth = minWidth;
NSRect badgeRect = NSMakeRect(0, 0, imageWidth, imageHeight);

NSBezierPath *badgePath = [NSBezierPath bezierPathWithRoundedRect:badgeRect xRadius:radius yRadius:radius];

NSImage *badgeImage = [[NSImage alloc] initWithSize:badgeRect.size];
[badgeImage lockFocus];

[badgeColor set];
[badgePath fill];

[badgeString drawInRect:badgeRect];

[badgeImage unlockFocus];

return badgeImage;
}

+ (NSImage *) checkedOutBadgeForCell:(NSTextFieldCell *)cell
{
return [self badge:@"" forCell:cell];
}

+ (NSImage *) numericBadge:(NSInteger)number forCell:(NSTextFieldCell *)cell
{
return [self badge:[NSString stringWithFormat:@"%d", number] forCell:cell];
}

@end
19 changes: 19 additions & 0 deletions PBSourceViewCell.h
@@ -0,0 +1,19 @@
//
// PBSourceViewCell.h
// GitX
//
// Created by Nathan Kinsinger on 1/7/10.
// Copyright 2010 Nathan Kinsinger. All rights reserved.
//

#import <Cocoa/Cocoa.h>
#import "PBIconAndTextCell.h"


@interface PBSourceViewCell : PBIconAndTextCell {
BOOL isCheckedOut;
}

@property (assign) BOOL isCheckedOut;

@end

0 comments on commit 90f80f0

Please sign in to comment.