diff --git a/.gitignore b/.gitignore index 89c499e..ebbef4b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,6 @@ # Xcode .DS_Store -build/ +*/build/* *.pbxuser !default.pbxuser *.mode1v3 @@ -9,10 +9,12 @@ build/ !default.mode2v3 *.perspectivev3 !default.perspectivev3 -*.xcworkspace -!default.xcworkspace xcuserdata profile *.moved-aside DerivedData .idea/ +*.hmap + +#CocoaPods +Pods diff --git a/Resources/AdiumGradient.png b/Assets/AdiumGradient.png similarity index 100% rename from Resources/AdiumGradient.png rename to Assets/AdiumGradient.png diff --git a/Resources/AquaTabCloseDirty_Front.png b/Assets/AquaTabCloseDirty_Front.png similarity index 100% rename from Resources/AquaTabCloseDirty_Front.png rename to Assets/AquaTabCloseDirty_Front.png diff --git a/Resources/AquaTabCloseDirty_Front_Pressed.png b/Assets/AquaTabCloseDirty_Front_Pressed.png similarity index 100% rename from Resources/AquaTabCloseDirty_Front_Pressed.png rename to Assets/AquaTabCloseDirty_Front_Pressed.png diff --git a/Resources/AquaTabCloseDirty_Front_Rollover.png b/Assets/AquaTabCloseDirty_Front_Rollover.png similarity index 100% rename from Resources/AquaTabCloseDirty_Front_Rollover.png rename to Assets/AquaTabCloseDirty_Front_Rollover.png diff --git a/Resources/AquaTabClose_Front.png b/Assets/AquaTabClose_Front.png similarity index 100% rename from Resources/AquaTabClose_Front.png rename to Assets/AquaTabClose_Front.png diff --git a/Resources/AquaTabClose_Front@2x.png b/Assets/AquaTabClose_Front@2x.png similarity index 100% rename from Resources/AquaTabClose_Front@2x.png rename to Assets/AquaTabClose_Front@2x.png diff --git a/Resources/AquaTabClose_Front_Pressed.png b/Assets/AquaTabClose_Front_Pressed.png similarity index 100% rename from Resources/AquaTabClose_Front_Pressed.png rename to Assets/AquaTabClose_Front_Pressed.png diff --git a/Resources/AquaTabClose_Front_Pressed@2x.png b/Assets/AquaTabClose_Front_Pressed@2x.png similarity index 100% rename from Resources/AquaTabClose_Front_Pressed@2x.png rename to Assets/AquaTabClose_Front_Pressed@2x.png diff --git a/Resources/AquaTabClose_Front_Rollover.png b/Assets/AquaTabClose_Front_Rollover.png similarity index 100% rename from Resources/AquaTabClose_Front_Rollover.png rename to Assets/AquaTabClose_Front_Rollover.png diff --git a/Resources/AquaTabClose_Front_Rollover@2x.png b/Assets/AquaTabClose_Front_Rollover@2x.png similarity index 100% rename from Resources/AquaTabClose_Front_Rollover@2x.png rename to Assets/AquaTabClose_Front_Rollover@2x.png diff --git a/Resources/AquaTabNew.png b/Assets/AquaTabNew.png similarity index 100% rename from Resources/AquaTabNew.png rename to Assets/AquaTabNew.png diff --git a/Resources/AquaTabNew@2x.png b/Assets/AquaTabNew@2x.png similarity index 100% rename from Resources/AquaTabNew@2x.png rename to Assets/AquaTabNew@2x.png diff --git a/Resources/AquaTabNewPressed.png b/Assets/AquaTabNewPressed.png similarity index 100% rename from Resources/AquaTabNewPressed.png rename to Assets/AquaTabNewPressed.png diff --git a/Resources/AquaTabNewPressed@2x.png b/Assets/AquaTabNewPressed@2x.png similarity index 100% rename from Resources/AquaTabNewPressed@2x.png rename to Assets/AquaTabNewPressed@2x.png diff --git a/Resources/AquaTabNewRollover.png b/Assets/AquaTabNewRollover.png similarity index 100% rename from Resources/AquaTabNewRollover.png rename to Assets/AquaTabNewRollover.png diff --git a/Resources/AquaTabNewRollover@2x.png b/Assets/AquaTabNewRollover@2x.png similarity index 100% rename from Resources/AquaTabNewRollover@2x.png rename to Assets/AquaTabNewRollover@2x.png diff --git a/Resources/AquaTabsBackground.png b/Assets/AquaTabsBackground.png similarity index 100% rename from Resources/AquaTabsBackground.png rename to Assets/AquaTabsBackground.png diff --git a/Resources/AquaTabsDown.png b/Assets/AquaTabsDown.png similarity index 100% rename from Resources/AquaTabsDown.png rename to Assets/AquaTabsDown.png diff --git a/Resources/AquaTabsDownGraphite.png b/Assets/AquaTabsDownGraphite.png similarity index 100% rename from Resources/AquaTabsDownGraphite.png rename to Assets/AquaTabsDownGraphite.png diff --git a/Resources/AquaTabsDownNonKey.png b/Assets/AquaTabsDownNonKey.png similarity index 100% rename from Resources/AquaTabsDownNonKey.png rename to Assets/AquaTabsDownNonKey.png diff --git a/Resources/AquaTabsSeparator.png b/Assets/AquaTabsSeparator.png similarity index 100% rename from Resources/AquaTabsSeparator.png rename to Assets/AquaTabsSeparator.png diff --git a/Resources/AquaTabsSeparatorDown.png b/Assets/AquaTabsSeparatorDown.png similarity index 100% rename from Resources/AquaTabsSeparatorDown.png rename to Assets/AquaTabsSeparatorDown.png diff --git a/Resources/English.lproj/InfoPlist.strings b/Assets/English.lproj/InfoPlist.strings similarity index 100% rename from Resources/English.lproj/InfoPlist.strings rename to Assets/English.lproj/InfoPlist.strings diff --git a/Resources/Japanese.lproj/InfoPlist.strings b/Assets/Japanese.lproj/InfoPlist.strings similarity index 100% rename from Resources/Japanese.lproj/InfoPlist.strings rename to Assets/Japanese.lproj/InfoPlist.strings diff --git a/Resources/Japanese.lproj/Inspector.xib b/Assets/Japanese.lproj/Inspector.xib similarity index 100% rename from Resources/Japanese.lproj/Inspector.xib rename to Assets/Japanese.lproj/Inspector.xib diff --git a/Resources/Japanese.lproj/Library.nib/designable.nib b/Assets/Japanese.lproj/Library.nib/designable.nib similarity index 100% rename from Resources/Japanese.lproj/Library.nib/designable.nib rename to Assets/Japanese.lproj/Library.nib/designable.nib diff --git a/Resources/Japanese.lproj/Library.nib/keyedobjects.nib b/Assets/Japanese.lproj/Library.nib/keyedobjects.nib similarity index 100% rename from Resources/Japanese.lproj/Library.nib/keyedobjects.nib rename to Assets/Japanese.lproj/Library.nib/keyedobjects.nib diff --git a/Resources/TabClose_Dirty.png b/Assets/TabClose_Dirty.png similarity index 100% rename from Resources/TabClose_Dirty.png rename to Assets/TabClose_Dirty.png diff --git a/Resources/TabClose_Dirty@2x.png b/Assets/TabClose_Dirty@2x.png similarity index 100% rename from Resources/TabClose_Dirty@2x.png rename to Assets/TabClose_Dirty@2x.png diff --git a/Resources/TabClose_Dirty_Pressed.png b/Assets/TabClose_Dirty_Pressed.png similarity index 100% rename from Resources/TabClose_Dirty_Pressed.png rename to Assets/TabClose_Dirty_Pressed.png diff --git a/Resources/TabClose_Dirty_Pressed@2x.png b/Assets/TabClose_Dirty_Pressed@2x.png similarity index 100% rename from Resources/TabClose_Dirty_Pressed@2x.png rename to Assets/TabClose_Dirty_Pressed@2x.png diff --git a/Resources/TabClose_Dirty_Rollover.png b/Assets/TabClose_Dirty_Rollover.png similarity index 100% rename from Resources/TabClose_Dirty_Rollover.png rename to Assets/TabClose_Dirty_Rollover.png diff --git a/Resources/TabClose_Dirty_Rollover@2x.png b/Assets/TabClose_Dirty_Rollover@2x.png similarity index 100% rename from Resources/TabClose_Dirty_Rollover@2x.png rename to Assets/TabClose_Dirty_Rollover@2x.png diff --git a/Resources/TabClose_Front.png b/Assets/TabClose_Front.png similarity index 100% rename from Resources/TabClose_Front.png rename to Assets/TabClose_Front.png diff --git a/Resources/TabClose_Front@2x.png b/Assets/TabClose_Front@2x.png similarity index 100% rename from Resources/TabClose_Front@2x.png rename to Assets/TabClose_Front@2x.png diff --git a/Resources/TabClose_Front_Pressed.png b/Assets/TabClose_Front_Pressed.png similarity index 100% rename from Resources/TabClose_Front_Pressed.png rename to Assets/TabClose_Front_Pressed.png diff --git a/Resources/TabClose_Front_Pressed@2x.png b/Assets/TabClose_Front_Pressed@2x.png similarity index 100% rename from Resources/TabClose_Front_Pressed@2x.png rename to Assets/TabClose_Front_Pressed@2x.png diff --git a/Resources/TabClose_Front_Rollover.png b/Assets/TabClose_Front_Rollover.png similarity index 100% rename from Resources/TabClose_Front_Rollover.png rename to Assets/TabClose_Front_Rollover.png diff --git a/Resources/TabClose_Front_Rollover@2x.png b/Assets/TabClose_Front_Rollover@2x.png similarity index 100% rename from Resources/TabClose_Front_Rollover@2x.png rename to Assets/TabClose_Front_Rollover@2x.png diff --git a/Resources/TabNewMetal.png b/Assets/TabNewMetal.png similarity index 100% rename from Resources/TabNewMetal.png rename to Assets/TabNewMetal.png diff --git a/Resources/TabNewMetalPressed.png b/Assets/TabNewMetalPressed.png similarity index 100% rename from Resources/TabNewMetalPressed.png rename to Assets/TabNewMetalPressed.png diff --git a/Resources/TabNewMetalRollover.png b/Assets/TabNewMetalRollover.png similarity index 100% rename from Resources/TabNewMetalRollover.png rename to Assets/TabNewMetalRollover.png diff --git a/Resources/overflowImage.png b/Assets/overflowImage.png similarity index 100% rename from Resources/overflowImage.png rename to Assets/overflowImage.png diff --git a/Resources/overflowImage@2x.png b/Assets/overflowImage@2x.png similarity index 100% rename from Resources/overflowImage@2x.png rename to Assets/overflowImage@2x.png diff --git a/Resources/overflowImagePressed.png b/Assets/overflowImagePressed.png similarity index 100% rename from Resources/overflowImagePressed.png rename to Assets/overflowImagePressed.png diff --git a/Resources/overflowImagePressed@2x.png b/Assets/overflowImagePressed@2x.png similarity index 100% rename from Resources/overflowImagePressed@2x.png rename to Assets/overflowImagePressed@2x.png diff --git a/Resources/pi.png b/Assets/pi.png similarity index 100% rename from Resources/pi.png rename to Assets/pi.png diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..dd02bf5 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,13 @@ +# PSMTabBarControl CHANGELOG + +## 1.0.4 + +Eliminated all warnings. + +## 1.0.3 + +Moved demo app into the 'Project' folder. + +## 1.0.2 + +Made a cocoapod with PSMTabBarControl that compiles with Xcode 5 and uses ARC. diff --git a/Source/NSString_AITruncation.h b/Classes/NSString_AITruncation.h similarity index 100% rename from Source/NSString_AITruncation.h rename to Classes/NSString_AITruncation.h diff --git a/Source/NSString_AITruncation.m b/Classes/NSString_AITruncation.m similarity index 87% rename from Source/NSString_AITruncation.m rename to Classes/NSString_AITruncation.m index 1a54502..8044f22 100644 --- a/Source/NSString_AITruncation.m +++ b/Classes/NSString_AITruncation.m @@ -12,7 +12,7 @@ @implementation NSString (AITruncation) + (id)ellipsis { - return [NSString stringWithUTF8String:"\xE2\x80\xA6"]; + return @"\xE2\x80\xA6"; } - (NSString *)stringWithEllipsisByTruncatingToLength:(NSUInteger)length { @@ -23,7 +23,7 @@ - (NSString *)stringWithEllipsisByTruncatingToLength:(NSUInteger)length { returnString = [[self substringToIndex:length - 1] stringByAppendingString:[NSString ellipsis]]; } else { //We don't need to truncate, so don't append an ellipsis - returnString = [[self copy] autorelease]; + returnString = [self copy]; } return returnString; diff --git a/Source/PSMAdiumTabStyle.h b/Classes/PSMAdiumTabStyle.h similarity index 100% rename from Source/PSMAdiumTabStyle.h rename to Classes/PSMAdiumTabStyle.h diff --git a/Source/PSMAdiumTabStyle.m b/Classes/PSMAdiumTabStyle.m similarity index 91% rename from Source/PSMAdiumTabStyle.m rename to Classes/PSMAdiumTabStyle.m index c87410e..64efa93 100644 --- a/Source/PSMAdiumTabStyle.m +++ b/Classes/PSMAdiumTabStyle.m @@ -61,23 +61,6 @@ - (void)loadImages { _gradientImage = [[NSImage alloc] initByReferencingFile:[[PSMTabBarControl bundle] pathForImageResource:@"AdiumGradient"]]; } -- (void)dealloc { - [_closeButton release]; - [_closeButtonDown release]; - [_closeButtonOver release]; - - [_closeDirtyButton release]; - [_closeDirtyButtonDown release]; - [_closeDirtyButtonOver release]; - - [_addTabButtonImage release]; - [_addTabButtonPressedImage release]; - [_addTabButtonRolloverImage release]; - - [_gradientImage release]; - - [super dealloc]; -} #pragma mark - #pragma mark Drawing Style Accessors @@ -178,7 +161,7 @@ - (NSImage *)closeButtonImageOfType:(PSMCloseButtonImageType)type forTabCell:(PS - (NSAttributedString *)attributedStringValueForTabCell:(PSMTabBarCell *)cell { NSMutableAttributedString *attrStr; NSString *contents = [cell title]; - attrStr = [[[NSMutableAttributedString alloc] initWithString:contents] autorelease]; + attrStr = [[NSMutableAttributedString alloc] initWithString:contents]; NSRange range = NSMakeRange(0, [contents length]); [attrStr addAttribute:NSFontAttributeName value:[NSFont systemFontOfSize:11.0] range:range]; @@ -187,7 +170,7 @@ - (NSAttributedString *)attributedStringValueForTabCell:(PSMTabBarCell *)cell { // Paragraph Style for Truncating Long Text static NSMutableParagraphStyle *truncatingTailParagraphStyle = nil; if(!truncatingTailParagraphStyle) { - truncatingTailParagraphStyle = [[[NSParagraphStyle defaultParagraphStyle] mutableCopy] retain]; + truncatingTailParagraphStyle = [[NSParagraphStyle defaultParagraphStyle] mutableCopy]; [truncatingTailParagraphStyle setLineBreakMode:NSLineBreakByTruncatingTail]; } [attrStr addAttribute:NSParagraphStyleAttributeName value:truncatingTailParagraphStyle range:range]; @@ -318,7 +301,13 @@ - (NSRect)iconRectForBounds:(NSRect)theRect ofTabCell:(PSMTabBarCell *)cell { if (orientation == PSMTabBarHorizontalOrientation) { result = NSMakeRect(drawingRect.origin.x, drawingRect.origin.y, scaledIconSize.width, scaledIconSize.height); } else { - result = NSMakeRect(NSMaxX(drawingRect)-scaledIconSize.width, drawingRect.origin.y, scaledIconSize.width, scaledIconSize.height); + NSRect constrainedDrawingRect = drawingRect; + + NSRect indicatorRect = [cell indicatorRectForBounds:theRect]; + if (!NSEqualRects(indicatorRect, NSZeroRect)) + constrainedDrawingRect.size.width -= NSWidth(indicatorRect) + kPSMTabBarCellPadding; + + result = NSMakeRect(NSMaxX(constrainedDrawingRect)-scaledIconSize.width, drawingRect.origin.y, scaledIconSize.width, scaledIconSize.height); } // center in available space (in case icon image is smaller than kPSMTabBarIconWidth) @@ -337,6 +326,11 @@ - (NSRect)iconRectForBounds:(NSRect)theRect ofTabCell:(PSMTabBarCell *)cell { - (NSRect)titleRectForBounds:(NSRect)theRect ofTabCell:(PSMTabBarCell *)cell { + //Don't bother calculating anything if we don't have a string + NSAttributedString *attrString = [cell attributedStringValue]; + if ([attrString length] == 0) + return NSZeroRect; + PSMTabBarControl *tabBarControl = [cell controlView]; PSMTabBarOrientation orientation = [tabBarControl orientation]; @@ -355,37 +349,35 @@ - (NSRect)titleRectForBounds:(NSRect)theRect ofTabCell:(PSMTabBarCell *)cell { constrainedDrawingRect.size.width -= kPSMAdiumImageWidth + kPSMTabBarCellPadding; } + NSRect closeButtonRect = [cell closeButtonRectForBounds:theRect]; + NSRect counterBadgeRect = [cell objectCounterRectForBounds:theRect]; + NSRect iconRect = [cell iconRectForBounds:theRect]; + CGFloat maxIconOrClose = MAX(NSWidth(closeButtonRect),NSWidth(iconRect)); if (orientation == PSMTabBarHorizontalOrientation) { - NSRect closeButtonRect = [cell closeButtonRectForBounds:theRect]; - NSRect iconRect = [cell iconRectForBounds:theRect]; - if (!NSEqualRects(closeButtonRect, NSZeroRect) || !NSEqualRects(iconRect, NSZeroRect)) { - constrainedDrawingRect.origin.x += MAX(NSWidth(closeButtonRect),NSWidth(iconRect)) + kPSMTabBarCellPadding; - constrainedDrawingRect.size.width -= MAX(NSWidth(closeButtonRect),NSWidth(iconRect)) + kPSMTabBarCellPadding; + constrainedDrawingRect.origin.x += maxIconOrClose + kPSMTabBarCellPadding; + constrainedDrawingRect.size.width -= maxIconOrClose + kPSMTabBarCellPadding; } - NSRect counterBadgeRect = [cell objectCounterRectForBounds:theRect]; if (!NSEqualRects(counterBadgeRect, NSZeroRect)) { constrainedDrawingRect.size.width -= NSWidth(counterBadgeRect) + kPSMTabBarCellPadding; } } else { - NSRect closeButtonRect = [cell closeButtonRectForBounds:theRect]; - NSRect counterBadgeRect = [cell objectCounterRectForBounds:theRect]; - if (!NSEqualRects(closeButtonRect, NSZeroRect) || !NSEqualRects(counterBadgeRect, NSZeroRect)) { - constrainedDrawingRect.size.width -= MAX(NSWidth(closeButtonRect),NSWidth(counterBadgeRect)) + kPSMTabBarCellPadding; - } + constrainedDrawingRect.size.width -= MAX(maxIconOrClose,NSWidth(counterBadgeRect)) + kPSMTabBarCellPadding; + } } + //Don't show a title if there's only enough space for a character if (constrainedDrawingRect.size.width <= 2) return NSZeroRect; - NSAttributedString *attrString = [cell attributedStringValue]; - if ([attrString length] == 0) - return NSZeroRect; - + //Make sure there's enough padding between the icon/close button and the text + if (NSMaxX(constrainedDrawingRect)-MAX(NSMinX(iconRect), NSMinX(closeButtonRect)) <= 2) + constrainedDrawingRect.size.width--; + NSSize stringSize = [attrString size]; NSRect result = NSMakeRect(constrainedDrawingRect.origin.x, drawingRect.origin.y+ceil((drawingRect.size.height-stringSize.height)/2), constrainedDrawingRect.size.width, stringSize.height); @@ -451,7 +443,7 @@ -(NSRect)largeImageRectForBounds:(NSRect)theRect ofTabCell:(PSMTabBarCell *)cell if (!image) return NSZeroRect; - NSSize scaledImageSize = [cell scaleImageWithSize:[image size] toFitInSize:NSMakeSize(constrainedDrawingRect.size.width, constrainedDrawingRect.size.height) scalingType:NSImageScaleProportionallyUpOrDown]; + NSSize scaledImageSize = [cell scaleImageWithSize:[image size] toFitInSize:NSMakeSize(MIN(constrainedDrawingRect.size.width, kPSMAdiumImageWidth), constrainedDrawingRect.size.height) scalingType:NSImageScaleProportionallyUpOrDown]; NSRect result = NSMakeRect(constrainedDrawingRect.origin.x, constrainedDrawingRect.origin.y - ((constrainedDrawingRect.size.height - scaledImageSize.height) / 2), @@ -461,7 +453,7 @@ -(NSRect)largeImageRectForBounds:(NSRect)theRect ofTabCell:(PSMTabBarCell *)cell result.origin.x += (kPSMTabBarCellPadding + kPSMAdiumImageWidth - scaledImageSize.width) / 2.0; } if(scaledImageSize.height < constrainedDrawingRect.size.height) { - result.origin.y += (constrainedDrawingRect.size.height - scaledImageSize.height) / 2.0; + result.origin.y += (constrainedDrawingRect.size.height - scaledImageSize.height); } return result; @@ -483,7 +475,6 @@ - (void)drawBezelOfTabBarControl:(PSMTabBarControl *)tabBarControl inRect:(NSRec if([tabBarControl isWindowActive]) { NSGradient *gradient = [[NSGradient alloc] initWithStartingColor:[NSColor colorWithCalibratedWhite:0.835 alpha:1.0] endingColor:[NSColor colorWithCalibratedWhite:0.843 alpha:1.0]]; [gradient drawInRect:rect angle:90.0]; - [gradient release]; } else { [[NSColor windowBackgroundColor] set]; NSRectFill(rect); @@ -577,7 +568,6 @@ - (void)drawBezelOfTabBarControl:(PSMTabBarControl *)tabBarControl inRect:(NSRec } } - [shadow release]; [NSGraphicsContext restoreGraphicsState]; } @@ -612,7 +602,6 @@ - (void)drawBezelOfTabCell:(PSMTabBarCell *)cell withFrame:(NSRect)frame inTabBa NSGradient *gradient = [[NSGradient alloc] initWithStartingColor:[NSColor colorWithCalibratedWhite:0.835 alpha:1.0] endingColor:[NSColor colorWithCalibratedWhite:0.843 alpha:1.0]]; [gradient drawInRect:aRect angle:90.0]; - [gradient release]; } else { [[NSColor windowBackgroundColor] set]; NSRectFill(aRect); @@ -661,7 +650,6 @@ - (void)drawBezelOfTabCell:(PSMTabBarCell *)cell withFrame:(NSRect)frame inTabBa NSGradient *gradient = [[NSGradient alloc] initWithStartingColor:[NSColor colorWithCalibratedWhite:0.835 alpha:1.0] endingColor:[NSColor colorWithCalibratedWhite:0.843 alpha:1.0]]; [gradient drawInRect:aRect angle:90.0]; - [gradient release]; } else { [[NSColor windowBackgroundColor] set]; NSRectFill(aRect); @@ -676,7 +664,6 @@ - (void)drawBezelOfTabCell:(PSMTabBarCell *)cell withFrame:(NSRect)frame inTabBa } [gradient drawInRect:aRect angle:0.0]; - [gradient release]; } // frame @@ -734,7 +721,6 @@ - (void)drawBezelOfTabCell:(PSMTabBarCell *)cell withFrame:(NSRect)frame inTabBa } [NSGraphicsContext restoreGraphicsState]; - [shadow release]; } - (void)drawIconOfTabCell:(PSMTabBarCell *)cell withFrame:(NSRect)frame inTabBarControl:(PSMTabBarControl *)tabBarControl { @@ -794,15 +780,15 @@ - (void)encodeWithCoder:(NSCoder *)aCoder { - (id)initWithCoder:(NSCoder *)aDecoder { if((self = [super init])) { if([aDecoder allowsKeyedCoding]) { - _closeButton = [[aDecoder decodeObjectForKey:@"closeButton"] retain]; - _closeButtonDown = [[aDecoder decodeObjectForKey:@"closeButtonDown"] retain]; - _closeButtonOver = [[aDecoder decodeObjectForKey:@"closeButtonOver"] retain]; - _closeDirtyButton = [[aDecoder decodeObjectForKey:@"closeDirtyButton"] retain]; - _closeDirtyButtonDown = [[aDecoder decodeObjectForKey:@"closeDirtyButtonDown"] retain]; - _closeDirtyButtonOver = [[aDecoder decodeObjectForKey:@"closeDirtyButtonOver"] retain]; - _addTabButtonImage = [[aDecoder decodeObjectForKey:@"addTabButtonImage"] retain]; - _addTabButtonPressedImage = [[aDecoder decodeObjectForKey:@"addTabButtonPressedImage"] retain]; - _addTabButtonRolloverImage = [[aDecoder decodeObjectForKey:@"addTabButtonRolloverImage"] retain]; + _closeButton = [aDecoder decodeObjectForKey:@"closeButton"]; + _closeButtonDown = [aDecoder decodeObjectForKey:@"closeButtonDown"]; + _closeButtonOver = [aDecoder decodeObjectForKey:@"closeButtonOver"]; + _closeDirtyButton = [aDecoder decodeObjectForKey:@"closeDirtyButton"]; + _closeDirtyButtonDown = [aDecoder decodeObjectForKey:@"closeDirtyButtonDown"]; + _closeDirtyButtonOver = [aDecoder decodeObjectForKey:@"closeDirtyButtonOver"]; + _addTabButtonImage = [aDecoder decodeObjectForKey:@"addTabButtonImage"]; + _addTabButtonPressedImage = [aDecoder decodeObjectForKey:@"addTabButtonPressedImage"]; + _addTabButtonRolloverImage = [aDecoder decodeObjectForKey:@"addTabButtonRolloverImage"]; _drawsUnified = [aDecoder decodeBoolForKey:@"drawsUnified"]; _drawsRight = [aDecoder decodeBoolForKey:@"drawsRight"]; } diff --git a/Source/PSMAquaTabStyle.h b/Classes/PSMAquaTabStyle.h similarity index 100% rename from Source/PSMAquaTabStyle.h rename to Classes/PSMAquaTabStyle.h diff --git a/Source/PSMAquaTabStyle.m b/Classes/PSMAquaTabStyle.m similarity index 82% rename from Source/PSMAquaTabStyle.m rename to Classes/PSMAquaTabStyle.m index 49d7a7d..64db170 100644 --- a/Source/PSMAquaTabStyle.m +++ b/Classes/PSMAquaTabStyle.m @@ -63,23 +63,6 @@ - (void) loadImages { _addTabButtonRolloverImage = [[NSImage alloc] initByReferencingFile:[[PSMTabBarControl bundle] pathForImageResource:@"AquaTabNewRollover"]]; } -- (void)dealloc { - [aquaTabBg release]; - [aquaTabBgDown release]; - [aquaDividerDown release]; - [aquaDivider release]; - [aquaCloseButton release]; - [aquaCloseButtonDown release]; - [aquaCloseButtonOver release]; - [aquaCloseDirtyButton release]; - [aquaCloseDirtyButtonDown release]; - [aquaCloseDirtyButtonOver release]; - [_addTabButtonImage release]; - [_addTabButtonPressedImage release]; - [_addTabButtonRolloverImage release]; - - [super dealloc]; -} #pragma mark - #pragma mark Control Specifics @@ -236,21 +219,21 @@ - (id)initWithCoder:(NSCoder *)aDecoder { //self = [super initWithCoder:aDecoder]; //if (self) { if([aDecoder allowsKeyedCoding]) { - aquaTabBg = [[aDecoder decodeObjectForKey:@"aquaTabBg"] retain]; - aquaTabBgDown = [[aDecoder decodeObjectForKey:@"aquaTabBgDown"] retain]; - aquaTabBgDownGraphite = [[aDecoder decodeObjectForKey:@"aquaTabBgDownGraphite"] retain]; - aquaTabBgDownNonKey = [[aDecoder decodeObjectForKey:@"aquaTabBgDownNonKey"] retain]; - aquaDividerDown = [[aDecoder decodeObjectForKey:@"aquaDividerDown"] retain]; - aquaDivider = [[aDecoder decodeObjectForKey:@"aquaDivider"] retain]; - aquaCloseButton = [[aDecoder decodeObjectForKey:@"aquaCloseButton"] retain]; - aquaCloseButtonDown = [[aDecoder decodeObjectForKey:@"aquaCloseButtonDown"] retain]; - aquaCloseButtonOver = [[aDecoder decodeObjectForKey:@"aquaCloseButtonOver"] retain]; - aquaCloseDirtyButton = [[aDecoder decodeObjectForKey:@"aquaCloseDirtyButton"] retain]; - aquaCloseDirtyButtonDown = [[aDecoder decodeObjectForKey:@"aquaCloseDirtyButtonDown"] retain]; - aquaCloseDirtyButtonOver = [[aDecoder decodeObjectForKey:@"aquaCloseDirtyButtonOver"] retain]; - _addTabButtonImage = [[aDecoder decodeObjectForKey:@"addTabButtonImage"] retain]; - _addTabButtonPressedImage = [[aDecoder decodeObjectForKey:@"addTabButtonPressedImage"] retain]; - _addTabButtonRolloverImage = [[aDecoder decodeObjectForKey:@"addTabButtonRolloverImage"] retain]; + aquaTabBg = [aDecoder decodeObjectForKey:@"aquaTabBg"]; + aquaTabBgDown = [aDecoder decodeObjectForKey:@"aquaTabBgDown"]; + aquaTabBgDownGraphite = [aDecoder decodeObjectForKey:@"aquaTabBgDownGraphite"]; + aquaTabBgDownNonKey = [aDecoder decodeObjectForKey:@"aquaTabBgDownNonKey"]; + aquaDividerDown = [aDecoder decodeObjectForKey:@"aquaDividerDown"]; + aquaDivider = [aDecoder decodeObjectForKey:@"aquaDivider"]; + aquaCloseButton = [aDecoder decodeObjectForKey:@"aquaCloseButton"]; + aquaCloseButtonDown = [aDecoder decodeObjectForKey:@"aquaCloseButtonDown"]; + aquaCloseButtonOver = [aDecoder decodeObjectForKey:@"aquaCloseButtonOver"]; + aquaCloseDirtyButton = [aDecoder decodeObjectForKey:@"aquaCloseDirtyButton"]; + aquaCloseDirtyButtonDown = [aDecoder decodeObjectForKey:@"aquaCloseDirtyButtonDown"]; + aquaCloseDirtyButtonOver = [aDecoder decodeObjectForKey:@"aquaCloseDirtyButtonOver"]; + _addTabButtonImage = [aDecoder decodeObjectForKey:@"addTabButtonImage"]; + _addTabButtonPressedImage = [aDecoder decodeObjectForKey:@"addTabButtonPressedImage"]; + _addTabButtonRolloverImage = [aDecoder decodeObjectForKey:@"addTabButtonRolloverImage"]; } //} return self; diff --git a/Source/PSMCardTabStyle.h b/Classes/PSMCardTabStyle.h similarity index 100% rename from Source/PSMCardTabStyle.h rename to Classes/PSMCardTabStyle.h diff --git a/Source/PSMCardTabStyle.m b/Classes/PSMCardTabStyle.m similarity index 94% rename from Source/PSMCardTabStyle.m rename to Classes/PSMCardTabStyle.m index 346aff1..9eec9a4 100644 --- a/Source/PSMCardTabStyle.m +++ b/Classes/PSMCardTabStyle.m @@ -49,19 +49,6 @@ - (id) init { return self; } -- (void)dealloc { - [cardCloseButton release]; - [cardCloseButtonDown release]; - [cardCloseButtonOver release]; - [cardCloseDirtyButton release]; - [cardCloseDirtyButtonDown release]; - [cardCloseDirtyButtonOver release]; - [_addTabButtonImage release]; - [_addTabButtonPressedImage release]; - [_addTabButtonRolloverImage release]; - - [super dealloc]; -} #pragma mark - #pragma mark Control Specific @@ -155,7 +142,6 @@ - (void)drawBezelOfTabBarControl:(PSMTabBarControl *)tabBarControl inRect:(NSRec if (gradient) { [gradient drawInRect:bounds angle:270]; - [gradient release]; } } @@ -215,7 +201,7 @@ - (void)drawBezelOfTabCell:(PSMTabBarCell *)cell withFrame:(NSRect)frame inTabBa if (gradient != nil) { [gradient drawInBezierPath:bezier angle:90.0f]; - [gradient release], gradient = nil; + gradient = nil; } } else { [[NSColor windowBackgroundColor] set]; diff --git a/Source/PSMLiveChatTabStyle.h b/Classes/PSMLiveChatTabStyle.h similarity index 100% rename from Source/PSMLiveChatTabStyle.h rename to Classes/PSMLiveChatTabStyle.h diff --git a/Source/PSMLiveChatTabStyle.m b/Classes/PSMLiveChatTabStyle.m similarity index 93% rename from Source/PSMLiveChatTabStyle.m rename to Classes/PSMLiveChatTabStyle.m index 060933b..a10a096 100644 --- a/Source/PSMLiveChatTabStyle.m +++ b/Classes/PSMLiveChatTabStyle.m @@ -39,30 +39,13 @@ - (id) init { _addTabButtonPressedImage = [[NSImage alloc] initByReferencingFile:[[PSMTabBarControl bundle] pathForImageResource:@"AquaTabNewPressed"]]; _addTabButtonRolloverImage = [[NSImage alloc] initByReferencingFile:[[PSMTabBarControl bundle] pathForImageResource:@"AquaTabNewRollover"]]; - _objectCountStringAttributes = [[NSDictionary alloc] initWithObjectsAndKeys: - [[NSColor whiteColor] colorWithAlphaComponent:0.85], NSForegroundColorAttributeName, - [[NSFontManager sharedFontManager] convertFont:[NSFont fontWithName:@"Lucida Grande" size:11.0] toHaveTrait:NSBoldFontMask], NSFontAttributeName, - nil]; + _objectCountStringAttributes = @{NSForegroundColorAttributeName: [[NSColor whiteColor] colorWithAlphaComponent:0.85], + NSFontAttributeName: [[NSFontManager sharedFontManager] convertFont:[NSFont fontWithName:@"Lucida Grande" size:11.0] toHaveTrait:NSBoldFontMask]}; _leftMargin = 5.0; } return self; } -- (void)dealloc { - [liveChatCloseButton release]; - [liveChatCloseButtonDown release]; - [liveChatCloseButtonOver release]; - [liveChatCloseDirtyButton release]; - [liveChatCloseDirtyButtonDown release]; - [liveChatCloseDirtyButtonOver release]; - [_addTabButtonImage release]; - [_addTabButtonPressedImage release]; - [_addTabButtonRolloverImage release]; - - [_objectCountStringAttributes release]; - - [super dealloc]; -} #pragma mark - #pragma mark Control Specific @@ -331,13 +314,13 @@ -(NSRect)largeImageRectForBounds:(NSRect)theRect ofTabCell:(PSMTabBarCell *)cell - (NSAttributedString *)attributedObjectCountStringValueForTabCell:(PSMTabBarCell *)cell { NSString *contents = [NSString stringWithFormat:@"%lu", (unsigned long)[cell count]]; - return [[[NSMutableAttributedString alloc] initWithString:contents attributes:_objectCountStringAttributes] autorelease]; + return [[NSMutableAttributedString alloc] initWithString:contents attributes:_objectCountStringAttributes]; } - (NSAttributedString *)attributedStringValueForTabCell:(PSMTabBarCell *)cell { NSMutableAttributedString *attrStr; NSString * contents = [cell title]; - attrStr = [[[NSMutableAttributedString alloc] initWithString:contents] autorelease]; + attrStr = [[NSMutableAttributedString alloc] initWithString:contents]; NSRange range = NSMakeRange(0, [contents length]); [attrStr addAttribute:NSFontAttributeName value:[NSFont systemFontOfSize:11.0] range:range]; @@ -345,7 +328,7 @@ - (NSAttributedString *)attributedStringValueForTabCell:(PSMTabBarCell *)cell { // Paragraph Style for Truncating Long Text static NSMutableParagraphStyle *TruncatingTailParagraphStyle = nil; if(!TruncatingTailParagraphStyle) { - TruncatingTailParagraphStyle = [[[NSParagraphStyle defaultParagraphStyle] mutableCopy] retain]; + TruncatingTailParagraphStyle = [[NSParagraphStyle defaultParagraphStyle] mutableCopy]; [TruncatingTailParagraphStyle setLineBreakMode:NSLineBreakByTruncatingTail]; } [attrStr addAttribute:NSParagraphStyleAttributeName value:TruncatingTailParagraphStyle range:range]; @@ -413,7 +396,6 @@ - (void)drawBezelOfTabCell:(PSMTabBarCell *)cell withFrame:(NSRect)frame inTabBa NSGradient *gradient = [[NSGradient alloc] initWithStartingColor:startColor endingColor:endColor]; [gradient drawInBezierPath:bezier angle:90.0]; - [gradient release]; [lineColor set]; [bezier stroke]; @@ -457,7 +439,6 @@ - (void)drawBezelOfTabBarControl:(PSMTabBarControl *)tabBarControl inRect:(NSRec NSBezierPath *path = [NSBezierPath bezierPathWithRect:gradientRect]; NSGradient *gradient = [[NSGradient alloc] initWithStartingColor:[NSColor colorWithCalibratedWhite:0.75 alpha:1.0] endingColor:[NSColor colorWithCalibratedWhite:0.75 alpha:0.0]]; [gradient drawInBezierPath:path angle:90.0]; - [gradient release]; } [[NSColor colorWithCalibratedWhite:0.576 alpha:1.0] set]; diff --git a/Source/PSMMetalTabStyle.h b/Classes/PSMMetalTabStyle.h similarity index 100% rename from Source/PSMMetalTabStyle.h rename to Classes/PSMMetalTabStyle.h diff --git a/Source/PSMMetalTabStyle.m b/Classes/PSMMetalTabStyle.m similarity index 89% rename from Source/PSMMetalTabStyle.m rename to Classes/PSMMetalTabStyle.m index a6161e7..916f90f 100644 --- a/Source/PSMMetalTabStyle.m +++ b/Classes/PSMMetalTabStyle.m @@ -44,21 +44,6 @@ - (id) init { return self; } -- (void)dealloc { - [metalCloseButton release]; - [metalCloseButtonDown release]; - [metalCloseButtonOver release]; - [metalCloseDirtyButton release]; - [metalCloseDirtyButtonDown release]; - [metalCloseDirtyButtonOver release]; - [_addTabButtonImage release]; - [_addTabButtonPressedImage release]; - [_addTabButtonRolloverImage release]; - - [_objectCountStringAttributes release]; - - [super dealloc]; -} #pragma mark - #pragma mark Control Specific @@ -146,13 +131,13 @@ - (NSImage *)closeButtonImageOfType:(PSMCloseButtonImageType)type forTabCell:(PS - (NSAttributedString *)attributedObjectCountStringValueForTabCell:(PSMTabBarCell *)cell { NSString *contents = [NSString stringWithFormat:@"%lu", (unsigned long)[cell count]]; - return [[[NSMutableAttributedString alloc] initWithString:contents attributes:_objectCountStringAttributes] autorelease]; + return [[NSMutableAttributedString alloc] initWithString:contents attributes:_objectCountStringAttributes]; } - (NSAttributedString *)attributedStringValueForTabCell:(PSMTabBarCell *)cell { NSMutableAttributedString *attrStr; NSString *contents = [cell title]; - attrStr = [[[NSMutableAttributedString alloc] initWithString:contents] autorelease]; + attrStr = [[NSMutableAttributedString alloc] initWithString:contents]; NSRange range = NSMakeRange(0, [contents length]); // Add font attribute @@ -161,7 +146,7 @@ - (NSAttributedString *)attributedStringValueForTabCell:(PSMTabBarCell *)cell { // Add shadow attribute NSShadow* shadow; - shadow = [[[NSShadow alloc] init] autorelease]; + shadow = [[NSShadow alloc] init]; CGFloat shadowAlpha; if(([cell state] == NSOnState) || [cell isHighlighted]) { shadowAlpha = 0.8; @@ -176,7 +161,7 @@ - (NSAttributedString *)attributedStringValueForTabCell:(PSMTabBarCell *)cell { // Paragraph Style for Truncating Long Text static NSMutableParagraphStyle *TruncatingTailParagraphStyle = nil; if(!TruncatingTailParagraphStyle) { - TruncatingTailParagraphStyle = [[[NSParagraphStyle defaultParagraphStyle] mutableCopy] retain]; + TruncatingTailParagraphStyle = [[NSParagraphStyle defaultParagraphStyle] mutableCopy]; [TruncatingTailParagraphStyle setLineBreakMode:NSLineBreakByTruncatingTail]; [TruncatingTailParagraphStyle setAlignment:NSCenterTextAlignment]; } @@ -387,15 +372,15 @@ - (id)initWithCoder:(NSCoder *)aDecoder { // self = [super initWithCoder:aDecoder]; //if (self) { if([aDecoder allowsKeyedCoding]) { - metalCloseButton = [[aDecoder decodeObjectForKey:@"metalCloseButton"] retain]; - metalCloseButtonDown = [[aDecoder decodeObjectForKey:@"metalCloseButtonDown"] retain]; - metalCloseButtonOver = [[aDecoder decodeObjectForKey:@"metalCloseButtonOver"] retain]; - metalCloseDirtyButton = [[aDecoder decodeObjectForKey:@"metalCloseDirtyButton"] retain]; - metalCloseDirtyButtonDown = [[aDecoder decodeObjectForKey:@"metalCloseDirtyButtonDown"] retain]; - metalCloseDirtyButtonOver = [[aDecoder decodeObjectForKey:@"metalCloseDirtyButtonOver"] retain]; - _addTabButtonImage = [[aDecoder decodeObjectForKey:@"addTabButtonImage"] retain]; - _addTabButtonPressedImage = [[aDecoder decodeObjectForKey:@"addTabButtonPressedImage"] retain]; - _addTabButtonRolloverImage = [[aDecoder decodeObjectForKey:@"addTabButtonRolloverImage"] retain]; + metalCloseButton = [aDecoder decodeObjectForKey:@"metalCloseButton"]; + metalCloseButtonDown = [aDecoder decodeObjectForKey:@"metalCloseButtonDown"]; + metalCloseButtonOver = [aDecoder decodeObjectForKey:@"metalCloseButtonOver"]; + metalCloseDirtyButton = [aDecoder decodeObjectForKey:@"metalCloseDirtyButton"]; + metalCloseDirtyButtonDown = [aDecoder decodeObjectForKey:@"metalCloseDirtyButtonDown"]; + metalCloseDirtyButtonOver = [aDecoder decodeObjectForKey:@"metalCloseDirtyButtonOver"]; + _addTabButtonImage = [aDecoder decodeObjectForKey:@"addTabButtonImage"]; + _addTabButtonPressedImage = [aDecoder decodeObjectForKey:@"addTabButtonPressedImage"]; + _addTabButtonRolloverImage = [aDecoder decodeObjectForKey:@"addTabButtonRolloverImage"]; } //} return self; diff --git a/Source/PSMOverflowPopUpButton.h b/Classes/PSMOverflowPopUpButton.h similarity index 100% rename from Source/PSMOverflowPopUpButton.h rename to Classes/PSMOverflowPopUpButton.h diff --git a/Source/PSMOverflowPopUpButton.m b/Classes/PSMOverflowPopUpButton.m similarity index 93% rename from Source/PSMOverflowPopUpButton.m rename to Classes/PSMOverflowPopUpButton.m index 68de520..2a22df8 100644 --- a/Source/PSMOverflowPopUpButton.m +++ b/Classes/PSMOverflowPopUpButton.m @@ -27,11 +27,6 @@ - (id)initWithFrame:(NSRect)frameRect pullsDown:(BOOL)flag { return self; } -- (void)dealloc { - [_PSMTabBarOverflowPopUpImage release]; - [_PSMTabBarOverflowDownPopUpImage release]; - [super dealloc]; -} - (void)drawRect:(NSRect)rect { if(_PSMTabBarOverflowPopUpImage == nil) { @@ -134,8 +129,8 @@ - (void)encodeWithCoder:(NSCoder *)aCoder { - (id)initWithCoder:(NSCoder *)aDecoder { if((self = [super initWithCoder:aDecoder])) { if([aDecoder allowsKeyedCoding]) { - _PSMTabBarOverflowPopUpImage = [[aDecoder decodeObjectForKey:@"PSMTabBarOverflowPopUpImage"] retain]; - _PSMTabBarOverflowDownPopUpImage = [[aDecoder decodeObjectForKey:@"PSMTabBarOverflowDownPopUpImage"] retain]; + _PSMTabBarOverflowPopUpImage = [aDecoder decodeObjectForKey:@"PSMTabBarOverflowPopUpImage"]; + _PSMTabBarOverflowDownPopUpImage = [aDecoder decodeObjectForKey:@"PSMTabBarOverflowDownPopUpImage"]; [self setAnimatingAlternateImage:[aDecoder decodeBoolForKey:@"PSMTabBarOverflowAnimatingAlternateImage"]]; } } diff --git a/Source/PSMProgressIndicator.h b/Classes/PSMProgressIndicator.h similarity index 100% rename from Source/PSMProgressIndicator.h rename to Classes/PSMProgressIndicator.h diff --git a/Source/PSMProgressIndicator.m b/Classes/PSMProgressIndicator.m similarity index 100% rename from Source/PSMProgressIndicator.m rename to Classes/PSMProgressIndicator.m diff --git a/Source/PSMRolloverButton.h b/Classes/PSMRolloverButton.h similarity index 76% rename from Source/PSMRolloverButton.h rename to Classes/PSMRolloverButton.h index 76d069d..df793a1 100644 --- a/Source/PSMRolloverButton.h +++ b/Classes/PSMRolloverButton.h @@ -13,7 +13,7 @@ NSImage *_usualImage; } -@property (retain) NSImage *usualImage; -@property (retain) NSImage *rolloverImage; +@property (strong) NSImage *usualImage; +@property (strong) NSImage *rolloverImage; @end \ No newline at end of file diff --git a/Source/PSMRolloverButton.m b/Classes/PSMRolloverButton.m similarity index 91% rename from Source/PSMRolloverButton.m rename to Classes/PSMRolloverButton.m index 8f187ec..49137b2 100644 --- a/Source/PSMRolloverButton.m +++ b/Classes/PSMRolloverButton.m @@ -27,10 +27,9 @@ - (void)dealloc { [self removeObserver:self forKeyPath:@"usualImage"]; - [_usualImage release], _usualImage = nil; - [_rolloverImage release], _rolloverImage = nil; + _usualImage = nil; + _rolloverImage = nil; - [super dealloc]; } // override for rollover effect @@ -84,7 +83,7 @@ - (void)addTrackingAreasInRect:(NSRect)cellFrame withUserInfo:(NSDictionary *)us // We make the view the owner, and it delegates the calls back to the cell after it is properly setup for the corresponding row/column in the outlineview area = [[NSTrackingArea alloc] initWithRect:cellFrame options:options owner:self userInfo:userInfo]; [self addTrackingArea:area]; - [area release], area = nil; + area = nil; } -(void)updateTrackingAreas { @@ -123,8 +122,8 @@ - (id)initWithCoder:(NSCoder *)aDecoder { self = [super initWithCoder:aDecoder]; if(self) { if([aDecoder allowsKeyedCoding]) { - _rolloverImage = [[aDecoder decodeObjectForKey:@"rolloverImage"] retain]; - _usualImage = [[aDecoder decodeObjectForKey:@"usualImage"] retain]; + _rolloverImage = [aDecoder decodeObjectForKey:@"rolloverImage"]; + _usualImage = [aDecoder decodeObjectForKey:@"usualImage"]; } } return self; diff --git a/Source/PSMTabBarCell.h b/Classes/PSMTabBarCell.h similarity index 99% rename from Source/PSMTabBarCell.h rename to Classes/PSMTabBarCell.h index 3917708..394ce4d 100644 --- a/Source/PSMTabBarCell.h +++ b/Classes/PSMTabBarCell.h @@ -53,7 +53,7 @@ typedef enum PSMTabBarCellTrackingAreaType : NSUInteger @property (assign) BOOL hasIcon; @property (assign) BOOL hasLargeImage; @property (assign) NSInteger count; -@property (retain) NSColor *countColor; +@property (strong) NSColor *countColor; @property (assign) BOOL isPlaceholder; @property (assign) BOOL isEdited; @property (assign) BOOL closeButtonPressed; diff --git a/Source/PSMTabBarCell.m b/Classes/PSMTabBarCell.m similarity index 96% rename from Source/PSMTabBarCell.m rename to Classes/PSMTabBarCell.m index a05532e..8894deb 100644 --- a/Source/PSMTabBarCell.m +++ b/Classes/PSMTabBarCell.m @@ -8,16 +8,11 @@ #import "PSMTabBarCell.h" #import "PSMTabBarControl.h" +#import "PSMTabBarControl_Private.h" #import "PSMTabStyle.h" #import "PSMProgressIndicator.h" #import "PSMTabDragAssistant.h" -@interface PSMTabBarControl (Private) - -- (void)update; - -@end - @interface PSMTabBarCell (/*Private*/) - (NSRect)_drawingRectForBounds:(NSRect)theRect; @@ -109,12 +104,9 @@ - (id)initPlaceholderWithFrame:(NSRect)frame expanded:(BOOL)value inTabBarContro } - (void)dealloc { - [_countColor release]; [_indicator removeFromSuperviewWithoutNeedingDisplay]; - [_indicator release]; - [super dealloc]; } #pragma mark - @@ -319,7 +311,7 @@ - (NSSize)objectCounterSize PSMTabBarControl *tabBarControl = (PSMTabBarControl *)[self controlView]; id tabStyle = [tabBarControl style]; - if ([tabStyle respondsToSelector:@selector(objectCounterSizeForTabCell:)]) { + if ([tabStyle respondsToSelector:@selector(objectCounterSizeOfTabCell:)]) { return [tabStyle objectCounterSizeOfTabCell:self]; } else { return [self _objectCounterSize]; @@ -547,13 +539,13 @@ - (void)addTrackingAreasForView:(NSView *)controlView inRect:(NSRect)cellFrame w } enrichedUserInfo = [userInfo mutableCopy]; - [enrichedUserInfo setObject:[NSNumber numberWithInteger:PSMTabBarCellTrackingAreaCellFrameType] forKey:@"type"]; + enrichedUserInfo[@"type"] = @(PSMTabBarCellTrackingAreaCellFrameType); // We make the view the owner, and it delegates the calls back to the cell after it is properly setup for the corresponding row/column in the outlineview area = [[NSTrackingArea alloc] initWithRect:cellFrame options:options owner:controlView userInfo:enrichedUserInfo]; [controlView addTrackingArea:area]; - [area release], area = nil; - [enrichedUserInfo release], enrichedUserInfo = nil; + area = nil; + enrichedUserInfo = nil; // ---- add tracking area for close button ---- @@ -568,14 +560,14 @@ - (void)addTrackingAreasForView:(NSView *)controlView inRect:(NSRect)cellFrame w } enrichedUserInfo = [userInfo mutableCopy]; - [enrichedUserInfo setObject:[NSNumber numberWithInteger:PSMTabBarCellTrackingAreaCloseButtonType] forKey:@"type"]; + enrichedUserInfo[@"type"] = @(PSMTabBarCellTrackingAreaCloseButtonType); // We make the view the owner, and it delegates the calls back to the cell after it is properly setup for the corresponding row/column in the outlineview area = [[NSTrackingArea alloc] initWithRect:closeButtonRect options:options owner:controlView userInfo:enrichedUserInfo]; [controlView addTrackingArea:area]; - [area release], area = nil; + area = nil; - [enrichedUserInfo release], enrichedUserInfo = nil; + enrichedUserInfo = nil; } } @@ -584,7 +576,7 @@ - (void)mouseEntered:(NSEvent *)theEvent { PSMTabBarControl *tabBarControl = [self controlView]; NSDictionary *userInfo = [theEvent userData]; - NSUInteger type = [[userInfo objectForKey:@"type"] unsignedIntegerValue]; + NSUInteger type = [userInfo[@"type"] unsignedIntegerValue]; switch (type) { case PSMTabBarCellTrackingAreaCellFrameType: @@ -612,7 +604,7 @@ - (void)mouseExited:(NSEvent *)theEvent { PSMTabBarControl *tabBarControl = [self controlView]; NSDictionary *userInfo = [theEvent userData]; - NSUInteger type = [[userInfo objectForKey:@"type"] unsignedIntegerValue]; + NSUInteger type = [userInfo[@"type"] unsignedIntegerValue]; switch (type) { case PSMTabBarCellTrackingAreaCellFrameType: @@ -649,11 +641,11 @@ - (NSImage *)dragImage { PSMTabBarControl *tabBarControl = [self controlView]; [tabBarControl lockFocus]; - NSBitmapImageRep *rep = [[[NSBitmapImageRep alloc] initWithFocusedViewRect:cellFrame] autorelease]; + NSBitmapImageRep *rep = [[NSBitmapImageRep alloc] initWithFocusedViewRect:cellFrame]; [tabBarControl unlockFocus]; - NSImage *image = [[[NSImage alloc] initWithSize:[rep size]] autorelease]; + NSImage *image = [[NSImage alloc] initWithSize:[rep size]]; [image addRepresentation:rep]; - NSImage *returnImage = [[[NSImage alloc] initWithSize:[rep size]] autorelease]; + NSImage *returnImage = [[NSImage alloc] initWithSize:[rep size]]; [returnImage lockFocus]; [image drawAtPoint:NSMakePoint(0.0, 0.0) fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1.0]; [returnImage unlockFocus]; @@ -663,7 +655,6 @@ - (NSImage *)dragImage { NSPoint indicatorPoint = NSMakePoint([self frame].size.width - MARGIN_X - kPSMTabBarIndicatorWidth, MARGIN_Y); [pi drawAtPoint:indicatorPoint fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1.0]; [returnImage unlockFocus]; - [pi release]; } return returnImage; } @@ -703,7 +694,7 @@ - (id)initWithCoder:(NSCoder *)aDecoder { _tabState = [aDecoder decodeIntegerForKey:@"tabState"]; _closeButtonOver = [aDecoder decodeBoolForKey:@"closeButtonOver"]; _closeButtonPressed = [aDecoder decodeBoolForKey:@"closeButtonPressed"]; - _indicator = [[aDecoder decodeObjectForKey:@"indicator"] retain]; + _indicator = [aDecoder decodeObjectForKey:@"indicator"]; _isInOverflowMenu = [aDecoder decodeBoolForKey:@"isInOverflowMenu"]; _hasCloseButton = [aDecoder decodeBoolForKey:@"hasCloseButton"]; _isCloseButtonSuppressed = [aDecoder decodeBoolForKey:@"isCloseButtonSuppressed"]; @@ -741,7 +732,7 @@ - (id)accessibilityAttributeValue:(NSString *)attribute { attributeValue = [self stringValue]; } } else if([attribute isEqualToString: NSAccessibilityValueAttribute]) { - attributeValue = [NSNumber numberWithBool:([self tabState] & PSMTab_SelectedMask)]; + attributeValue = @([self tabState] & PSMTab_SelectedMask); } else if ([attribute isEqualToString:NSAccessibilityPositionAttribute] || [attribute isEqualToString:NSAccessibilitySizeAttribute]) { NSRect rect = [self frame]; rect = [[self controlView] convertRect:rect toView:nil]; @@ -764,7 +755,7 @@ - (NSArray *)accessibilityActionNames { static NSArray *actions; if(!actions) { - actions = [[NSArray alloc] initWithObjects:NSAccessibilityPressAction, nil]; + actions = @[NSAccessibilityPressAction]; } return actions; } @@ -1093,7 +1084,7 @@ - (NSAttributedString *)_attributedStringValue { NSMutableAttributedString *attrStr; NSString *contents = [self title]; - attrStr = [[[NSMutableAttributedString alloc] initWithString:contents] autorelease]; + attrStr = [[NSMutableAttributedString alloc] initWithString:contents]; NSRange range = NSMakeRange(0, [contents length]); [attrStr addAttribute:NSFontAttributeName value:[NSFont systemFontOfSize:11.0] range:range]; @@ -1102,7 +1093,7 @@ - (NSAttributedString *)_attributedStringValue { // Paragraph Style for Truncating Long Text static NSMutableParagraphStyle *truncatingTailParagraphStyle = nil; if(!truncatingTailParagraphStyle) { - truncatingTailParagraphStyle = [[[NSParagraphStyle defaultParagraphStyle] mutableCopy] retain]; + truncatingTailParagraphStyle = [[NSParagraphStyle defaultParagraphStyle] mutableCopy]; [truncatingTailParagraphStyle setLineBreakMode:NSLineBreakByTruncatingTail]; [truncatingTailParagraphStyle setAlignment:NSCenterTextAlignment]; } @@ -1120,7 +1111,7 @@ - (NSAttributedString *)_attributedObjectCountStringValue { } NSString *contents = [NSString stringWithFormat:@"%lu", (unsigned long)[self count]]; - return [[[NSMutableAttributedString alloc] initWithString:contents attributes:objectCountStringAttributes] autorelease]; + return [[NSMutableAttributedString alloc] initWithString:contents attributes:objectCountStringAttributes]; } - (void)_drawWithFrame:(NSRect)cellFrame inTabBarControl:(PSMTabBarControl *)tabBarControl { @@ -1220,7 +1211,6 @@ - (void)_drawTitleWithFrame:(NSRect)frame inTabBarControl:(PSMTabBarControl *)ta [NSGraphicsContext restoreGraphicsState]; - [shadow release]; } - (void)_drawObjectCounterWithFrame:(NSRect)frame inTabBarControl:(PSMTabBarControl *)tabBarControl { diff --git a/Source/PSMTabBarControl-Info.plist b/Classes/PSMTabBarControl-Info.plist similarity index 100% rename from Source/PSMTabBarControl-Info.plist rename to Classes/PSMTabBarControl-Info.plist diff --git a/Source/PSMTabBarControl.h b/Classes/PSMTabBarControl.h similarity index 100% rename from Source/PSMTabBarControl.h rename to Classes/PSMTabBarControl.h diff --git a/Source/PSMTabBarControl.m b/Classes/PSMTabBarControl.m similarity index 85% rename from Source/PSMTabBarControl.m rename to Classes/PSMTabBarControl.m index 993febc..f3579a7 100644 --- a/Source/PSMTabBarControl.m +++ b/Classes/PSMTabBarControl.m @@ -7,6 +7,7 @@ // #import "PSMTabBarControl.h" +#import "PSMTabBarControl_Private.h" #import "PSMTabBarCell.h" #import "PSMOverflowPopUpButton.h" #import "PSMRolloverButton.h" @@ -19,74 +20,12 @@ #import "PSMCardTabStyle.h" #import "PSMTabDragAssistant.h" #import "PSMTabBarController.h" +#import "PSMTabViewItemIdentifier.h" -@interface PSMTabBarControl (/*Private*/) - -- (NSTabViewItem *)_tabViewItemForEvent:(NSEvent *)event; -- (void)_delegateMouseEvent:(NSEvent *)event; -- (CGFloat)_heightOfTabCells; -- (CGFloat)_rightMargin; -- (CGFloat)_leftMargin; -- (CGFloat)_topMargin; -- (CGFloat)_bottomMargin; -- (NSSize)_addTabButtonSize; -- (NSRect)_addTabButtonRect; -- (NSSize)_overflowButtonSize; -- (NSRect)_overflowButtonRect; -- (void)_drawTabBarControlInRect:(NSRect)aRect; -- (void)_drawBezelInRect:(NSRect)rect; -- (void)_drawInteriorInRect:(NSRect)rect; +@interface PSMTabBarControl () @end -@interface PSMTabBarControl (Private) - -// constructor/destructor -- (void)initAddedProperties; - -// accessors -- (NSEvent *)lastMouseDownEvent; -- (void)setLastMouseDownEvent:(NSEvent *)event; - -// contents -- (void)addTabViewItem:(NSTabViewItem *)item; -- (void)addTabViewItem:(NSTabViewItem *)item atIndex:(NSUInteger)index; -- (void)removeTabForCell:(PSMTabBarCell *)cell; - -// draw -- (void)update; -- (void)update:(BOOL)animate; -- (void)_positionOverflowMenu; -- (void)_checkWindowFrame; - -// actions -- (void)overflowMenuAction:(id)sender; -- (void)closeTabClick:(id)sender; -- (void)tabClick:(id)sender; -- (void)tabNothing:(id)sender; - -// notification handlers -- (void)frameDidChange:(NSNotification *)notification; -- (void)windowDidMove:(NSNotification *)aNotification; -- (void)windowDidUpdate:(NSNotification *)notification; - -// NSTabView delegate -- (void)tabView:(NSTabView *)tabView didSelectTabViewItem:(NSTabViewItem *)tabViewItem; -- (BOOL)tabView:(NSTabView *)tabView shouldSelectTabViewItem:(NSTabViewItem *)tabViewItem; -- (void)tabView:(NSTabView *)tabView willSelectTabViewItem:(NSTabViewItem *)tabViewItem; -- (void)tabViewDidChangeNumberOfTabViewItems:(NSTabView *)tabView; - -// archiving -- (void)encodeWithCoder:(NSCoder *)aCoder; -- (id)initWithCoder:(NSCoder *)aDecoder; - -// convenience -- (void)_bindPropertiesForCell:(PSMTabBarCell *)cell andTabViewItem:(NSTabViewItem *)item; -- (id)cellForPoint:(NSPoint)point cellFrame:(NSRectPointer)outFrame; - -- (void)_animateCells:(NSTimer *)timer; -@end - @implementation PSMTabBarControl static NSMutableDictionary *registeredStyleClasses; @@ -94,7 +33,7 @@ @implementation PSMTabBarControl +(void)initialize { if (registeredStyleClasses == nil) { - registeredStyleClasses = [[NSMutableDictionary dictionaryWithCapacity:10] retain]; + registeredStyleClasses = [NSMutableDictionary dictionaryWithCapacity:10]; [self registerDefaultTabStyleClasses]; } @@ -264,7 +203,7 @@ - (id)initWithFrame:(NSRect)frame { if(self) { // Initialization [self initAddedProperties]; - [self registerForDraggedTypes:[NSArray arrayWithObjects:@"PSMTabBarControlItemPBType", nil]]; + [self registerForDraggedTypes:@[@"PSMTabBarControlItemPBType"]]; // resize [self setPostsFrameChangedNotifications:YES]; @@ -286,14 +225,14 @@ - (void)dealloc { //stop any animations that may be running [_animationTimer invalidate]; - [_animationTimer release]; _animationTimer = nil; + _animationTimer = nil; [_showHideAnimationTimer invalidate]; - [_showHideAnimationTimer release]; _showHideAnimationTimer = nil; + _showHideAnimationTimer = nil; //Also unwind the spring, if it's wound. [_springTimer invalidate]; - [_springTimer release]; _springTimer = nil; + _springTimer = nil; //unbind all the items to prevent crashing //not sure if this is necessary or not @@ -302,20 +241,10 @@ - (void)dealloc { for (PSMTabBarCell *aCell in tmpCellArray) { [self removeTabForCell:aCell]; } - [tmpCellArray release]; - [_overflowPopUpButton release]; - [_cells release]; - [_controller release]; - [tabView release]; - [_addTabButton release]; - [partnerView release]; - [_lastMouseDownEvent release]; - [style release]; [self unregisterDraggedTypes]; - [super dealloc]; } - (void)awakeFromNib { @@ -337,7 +266,7 @@ - (void)viewWillMoveToWindow:(NSWindow *)aWindow { if(_showHideAnimationTimer) { [_showHideAnimationTimer invalidate]; - [_showHideAnimationTimer release]; _showHideAnimationTimer = nil; + _showHideAnimationTimer = nil; } if(aWindow) { @@ -366,7 +295,7 @@ + (void)registerDefaultTabStyleClasses { } + (void)registerTabStyleClass:(Class )aStyleClass { - [registeredStyleClasses setObject:aStyleClass forKey:[aStyleClass name]]; + registeredStyleClasses[[aStyleClass name]] = aStyleClass; } + (void)unregisterTabStyleClass:(Class )aStyleClass { @@ -378,14 +307,14 @@ + (NSArray *)registeredTabStyleClasses { } + (Class )registeredClassForStyleName:(NSString *)name { - return [registeredStyleClasses objectForKey:name]; + return registeredStyleClasses[name]; } #pragma mark - #pragma mark Cell Management (KVC Compliant) - (NSArray *)cells { - return [[_cells copy] autorelease]; + return [_cells copy]; } // ---- KVC primitives ---- @@ -407,7 +336,7 @@ -(void)removeCellsAtIndexes:(NSIndexSet *)indexes { } -(void)replaceObjectInCellsAtIndex:(NSUInteger)anIndex withObject:(PSMTabBarCell *)aCell { - [_cells replaceObjectAtIndex:anIndex withObject:aCell]; + _cells[anIndex] = aCell; } -(void)replaceCellsAtIndexes:(NSIndexSet *)indexes withCells:(NSArray *)cellArray { @@ -453,8 +382,6 @@ - (NSEvent *)lastMouseDownEvent { } - (void)setLastMouseDownEvent:(NSEvent *)event { - [event retain]; - [_lastMouseDownEvent release]; _lastMouseDownEvent = event; } @@ -480,8 +407,6 @@ - (NSTabView *)tabView { } - (void)setTabView:(NSTabView *)view { - [view retain]; - [tabView release]; tabView = view; } @@ -495,8 +420,7 @@ - (NSString *)styleName { - (void)setStyle:(id )newStyle { if(style != newStyle) { - [style autorelease]; - style = [newStyle retain]; + style = newStyle; // restyle add tab button if(_addTabButton) { @@ -528,7 +452,6 @@ - (void)setStyleNamed:(NSString *)name { id newStyle = [[(Class)styleClass alloc] init]; [self setStyle:newStyle]; - [newStyle release]; } - (PSMTabBarOrientation)orientation { @@ -742,7 +665,6 @@ - (void)addTabViewItem:(NSTabViewItem *)item atIndex:(NSUInteger)index { // add to collection [self insertCell:cell atIndex:index]; - [cell release]; if([_cells count] == [tabView numberOfTabViewItems]) { [self update]; // don't update unless all are accounted for! } @@ -754,6 +676,7 @@ - (void)addTabViewItem:(NSTabViewItem *)item { - (void)removeTabForCell:(PSMTabBarCell *)cell { NSTabViewItem *item = [cell representedObject]; + NSObject *identifier = [item identifier]; // unbind [[cell indicator] unbind:@"animate"]; @@ -765,39 +688,39 @@ - (void)removeTabForCell:(PSMTabBarCell *)cell { [cell unbind:@"countColor"]; [cell unbind:@"isEdited"]; - if([item identifier] != nil) { - if([[item identifier] respondsToSelector:@selector(isProcessing)]) { - [[item identifier] removeObserver:cell forKeyPath:@"isProcessing"]; + if(identifier != nil) { + if([identifier respondsToSelector:@selector(isProcessing)]) { + [identifier removeObserver:cell forKeyPath:@"isProcessing"]; } } - if([item identifier] != nil) { - if([[item identifier] respondsToSelector:@selector(icon)]) { - [[item identifier] removeObserver:cell forKeyPath:@"icon"]; + if(item != nil) { + if([identifier respondsToSelector:@selector(icon)]) { + [identifier removeObserver:cell forKeyPath:@"icon"]; } } - if([item identifier] != nil) { - if([[item identifier] respondsToSelector:@selector(objectCount)]) { - [[item identifier] removeObserver:cell forKeyPath:@"objectCount"]; + if(identifier != nil) { + if([identifier respondsToSelector:@selector(objectCount)]) { + [identifier removeObserver:cell forKeyPath:@"objectCount"]; } } - if([item identifier] != nil) { - if([[item identifier] respondsToSelector:@selector(countColor)]) { - [[item identifier] removeObserver:cell forKeyPath:@"countColor"]; + if(identifier != nil) { + if([identifier respondsToSelector:@selector(countColor)]) { + [identifier removeObserver:cell forKeyPath:@"countColor"]; } } - if([item identifier] != nil) { - if([[item identifier] respondsToSelector:@selector(largeImage)]) { - [[item identifier] removeObserver:cell forKeyPath:@"largeImage"]; + if(identifier != nil) { + if([identifier respondsToSelector:@selector(largeImage)]) { + [identifier removeObserver:cell forKeyPath:@"largeImage"]; } } - if([item identifier] != nil) { - if([[item identifier] respondsToSelector:@selector(isEdited)]) { - [[item identifier] removeObserver:cell forKeyPath:@"isEdited"]; + if(identifier != nil) { + if([identifier respondsToSelector:@selector(isEdited)]) { + [identifier removeObserver:cell forKeyPath:@"isEdited"]; } } @@ -831,12 +754,12 @@ - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(N // did the tab's identifier change? } else if([keyPath isEqualToString:@"identifier"]) { - id oldIdentifier = [change objectForKey: NSKeyValueChangeOldKey]; + id oldIdentifier = change[NSKeyValueChangeOldKey]; for (PSMTabBarCell *cell in _cells) { if([cell representedObject] == object) { // unbind the old value first - NSArray *selectors = [NSArray arrayWithObjects: @"isProcessing", @"icon", @"objectCount", @"countColor", @"largeImage", @"isEdited", nil]; + NSArray *selectors = @[@"isProcessing", @"icon", @"objectCount", @"countColor", @"largeImage", @"isEdited"]; for (NSString *selector in selectors) { if([oldIdentifier respondsToSelector: NSSelectorFromString(selector)]) { [oldIdentifier unbind: selector]; @@ -1009,22 +932,21 @@ - (void)hideTabBar:(BOOL)hide animate:(BOOL)animate { } } - NSDictionary *userInfo = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithDouble:myOriginalOrigin], @"myOriginalOrigin", [NSNumber numberWithDouble:partnerOriginalOrigin], @"partnerOriginalOrigin", [NSNumber numberWithDouble:myOriginalSize], @"myOriginalSize", [NSNumber numberWithDouble:partnerOriginalSize], @"partnerOriginalSize", [NSNumber numberWithDouble:myTargetOrigin], @"myTargetOrigin", [NSNumber numberWithDouble:partnerTargetOrigin], @"partnerTargetOrigin", [NSNumber numberWithDouble:myTargetSize], @"myTargetSize", [NSNumber numberWithDouble:partnerTargetSize], @"partnerTargetSize", nil]; + NSDictionary *userInfo = @{@"myOriginalOrigin": @(myOriginalOrigin), @"partnerOriginalOrigin": @(partnerOriginalOrigin), @"myOriginalSize": @(myOriginalSize), @"partnerOriginalSize": @(partnerOriginalSize), @"myTargetOrigin": @(myTargetOrigin), @"partnerTargetOrigin": @(partnerTargetOrigin), @"myTargetSize": @(myTargetSize), @"partnerTargetSize": @(partnerTargetSize)}; if(_showHideAnimationTimer) { [_showHideAnimationTimer invalidate]; - [_showHideAnimationTimer release]; } - _showHideAnimationTimer = [[NSTimer scheduledTimerWithTimeInterval:(1.0 / 30.0) target:self selector:@selector(animateShowHide:) userInfo:userInfo repeats:YES] retain]; + _showHideAnimationTimer = [NSTimer scheduledTimerWithTimeInterval:(1.0 / 30.0) target:self selector:@selector(animateShowHide:) userInfo:userInfo repeats:YES]; } - (void)animateShowHide:(NSTimer *)timer { // moves the frame of the tab bar and window (or partner view) linearly to hide or show the tab bar NSRect myFrame = [self frame]; NSDictionary *userInfo = [timer userInfo]; - CGFloat myCurrentOrigin = ([[userInfo objectForKey:@"myOriginalOrigin"] doubleValue] + (([[userInfo objectForKey:@"myTargetOrigin"] doubleValue] - [[userInfo objectForKey:@"myOriginalOrigin"] doubleValue]) * (_currentStep / kPSMHideAnimationSteps))); - CGFloat myCurrentSize = ([[userInfo objectForKey:@"myOriginalSize"] doubleValue] + (([[userInfo objectForKey:@"myTargetSize"] doubleValue] - [[userInfo objectForKey:@"myOriginalSize"] doubleValue]) * (_currentStep / kPSMHideAnimationSteps))); - CGFloat partnerCurrentOrigin = ([[userInfo objectForKey:@"partnerOriginalOrigin"] doubleValue] + (([[userInfo objectForKey:@"partnerTargetOrigin"] doubleValue] - [[userInfo objectForKey:@"partnerOriginalOrigin"] doubleValue]) * (_currentStep / kPSMHideAnimationSteps))); - CGFloat partnerCurrentSize = ([[userInfo objectForKey:@"partnerOriginalSize"] doubleValue] + (([[userInfo objectForKey:@"partnerTargetSize"] doubleValue] - [[userInfo objectForKey:@"partnerOriginalSize"] doubleValue]) * (_currentStep / kPSMHideAnimationSteps))); + CGFloat myCurrentOrigin = ([userInfo[@"myOriginalOrigin"] doubleValue] + (([userInfo[@"myTargetOrigin"] doubleValue] - [userInfo[@"myOriginalOrigin"] doubleValue]) * (_currentStep / kPSMHideAnimationSteps))); + CGFloat myCurrentSize = ([userInfo[@"myOriginalSize"] doubleValue] + (([userInfo[@"myTargetSize"] doubleValue] - [userInfo[@"myOriginalSize"] doubleValue]) * (_currentStep / kPSMHideAnimationSteps))); + CGFloat partnerCurrentOrigin = ([userInfo[@"partnerOriginalOrigin"] doubleValue] + (([userInfo[@"partnerTargetOrigin"] doubleValue] - [userInfo[@"partnerOriginalOrigin"] doubleValue]) * (_currentStep / kPSMHideAnimationSteps))); + CGFloat partnerCurrentSize = ([userInfo[@"partnerOriginalSize"] doubleValue] + (([userInfo[@"partnerTargetSize"] doubleValue] - [userInfo[@"partnerOriginalSize"] doubleValue]) * (_currentStep / kPSMHideAnimationSteps))); NSRect myNewFrame; if([self orientation] == PSMTabBarHorizontalOrientation) { @@ -1078,7 +1000,7 @@ - (void)animateShowHide:(NSTimer *)timer { } [_showHideAnimationTimer invalidate]; - [_showHideAnimationTimer release]; _showHideAnimationTimer = nil; + _showHideAnimationTimer = nil; } [[self window] display]; } @@ -1096,8 +1018,6 @@ - (id)partnerView { } - (void)setPartnerView:(id)view { - [partnerView release]; - [view retain]; partnerView = view; } @@ -1270,7 +1190,7 @@ - (void)update:(BOOL)animate { if(_animationTimer) { [_animationTimer invalidate]; - [_animationTimer release]; _animationTimer = nil; + _animationTimer = nil; } if(animate) { @@ -1286,17 +1206,16 @@ - (void)update:(BOOL)animate { NSAnimation *animation = [[NSAnimation alloc] initWithDuration:0.50 animationCurve:NSAnimationEaseInOut]; [animation setAnimationBlockingMode:NSAnimationNonblocking]; [animation startAnimation]; - _animationTimer = [[NSTimer scheduledTimerWithTimeInterval:1.0 / 30.0 + _animationTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 / 30.0 target:self selector:@selector(_animateCells:) - userInfo:[NSArray arrayWithObjects:targetFrames, animation, nil] - repeats:YES] retain]; - [animation release]; + userInfo:@[targetFrames, animation] + repeats:YES]; [[NSRunLoop currentRunLoop] addTimer:_animationTimer forMode:NSEventTrackingRunLoopMode]; [self _animateCells:_animationTimer]; } else { for(NSInteger i = 0; i < [_cells count]; i++) { - currentCell = [_cells objectAtIndex:i]; + currentCell = _cells[i]; [currentCell setFrame:[_controller cellFrameAtIndex:i]]; } @@ -1308,16 +1227,16 @@ - (void)update:(BOOL)animate { } - (void)_animateCells:(NSTimer *)timer { - NSAnimation *animation = [[timer userInfo] objectAtIndex:1]; - NSArray *targetFrames = [[timer userInfo] objectAtIndex:0]; + NSAnimation *animation = [timer userInfo][1]; + NSArray *targetFrames = [timer userInfo][0]; PSMTabBarCell *currentCell; NSInteger cellCount = [_cells count]; if((cellCount > 0) && [animation isAnimating]) { //compare our target position with the current position and move towards the target for(NSInteger i = 0; i < [targetFrames count] && i < cellCount; i++) { - currentCell = [_cells objectAtIndex:i]; - NSRect cellFrame = [currentCell frame], targetFrame = [[targetFrames objectAtIndex:i] rectValue]; + currentCell = _cells[i]; + NSRect cellFrame = [currentCell frame], targetFrame = [targetFrames[i] rectValue]; CGFloat sizeChange; CGFloat originChange; @@ -1353,8 +1272,8 @@ - (void)_animateCells:(NSTimer *)timer { //put all the cells where they should be in their final position if(cellCount > 0) { for(NSInteger i = 0; i < [targetFrames count] && i < cellCount; i++) { - PSMTabBarCell *currentCell = [_cells objectAtIndex:i]; - NSRect cellFrame = [currentCell frame], targetFrame = [[targetFrames objectAtIndex:i] rectValue]; + PSMTabBarCell *currentCell = _cells[i]; + NSRect cellFrame = [currentCell frame], targetFrame = [targetFrames[i] rectValue]; if([self orientation] == PSMTabBarHorizontalOrientation) { cellFrame.size.width = targetFrame.size.width; @@ -1380,7 +1299,7 @@ - (void)_animateCells:(NSTimer *)timer { } [_animationTimer invalidate]; - [_animationTimer release]; _animationTimer = nil; + _animationTimer = nil; [self updateTrackingAreas]; } @@ -1441,7 +1360,7 @@ - (void)updateTrackingAreas { if ([aCell isInOverflowMenu]) break; - NSDictionary *userInfo = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInteger:cellIndex], @"cellIndex", aCell, @"cell", nil]; + NSDictionary *userInfo = @{@"cellIndex": @(cellIndex), @"cell": aCell}; [aCell addTrackingAreasForView:self inRect:[aCell frame] withUserInfo:userInfo mouseLocation:mouseLocation]; [self addToolTipRect:[aCell frame] owner:self userData:nil]; @@ -1454,7 +1373,7 @@ - (void)mouseEntered:(NSEvent *)theEvent { if ([[theEvent trackingArea] owner] == self) { NSDictionary *userInfo = [theEvent userData]; - PSMTabBarCell *tabBarCell = [userInfo objectForKey:@"cell"]; + PSMTabBarCell *tabBarCell = userInfo[@"cell"]; if (tabBarCell) [tabBarCell mouseEntered:theEvent]; } @@ -1465,7 +1384,7 @@ - (void)mouseExited:(NSEvent *)theEvent { if ([[theEvent trackingArea] owner] == self) { NSDictionary *userInfo = [theEvent userData]; - PSMTabBarCell *tabBarCell = [userInfo objectForKey:@"cell"]; + PSMTabBarCell *tabBarCell = userInfo[@"cell"]; if (tabBarCell) [tabBarCell mouseExited:theEvent]; } @@ -1600,7 +1519,7 @@ - (void)mouseUp:(NSEvent *)theEvent { } } - [tmpCellArray release], tmpCellArray = nil; + tmpCellArray = nil; //Fix the close button for the clicked tab not to be pressed [cell setCloseButtonPressed:NO]; @@ -1729,18 +1648,18 @@ - (NSDragOperation)draggingUpdated:(id )sender { //If the user has dragged to a different tab, reset the timer. if(_tabViewItemWithSpring != [cell representedObject]) { [_springTimer invalidate]; - [_springTimer release]; _springTimer = nil; + _springTimer = nil; _tabViewItemWithSpring = [cell representedObject]; } if(!_springTimer) { //Finder's default delay time, as of Tiger, is 668 ms. If the user has never changed it, there's no setting in its defaults, so we default to that amount. - NSNumber *delayNumber = NSMakeCollectable([(NSNumber *)CFPreferencesCopyAppValue((CFStringRef)@"SpringingDelayMilliseconds", (CFStringRef)@"com.apple.finder") autorelease]); + NSNumber *delayNumber = (NSNumber *)CFBridgingRelease(CFPreferencesCopyAppValue((CFStringRef)@"SpringingDelayMilliseconds", (CFStringRef)@"com.apple.finder")); NSTimeInterval delaySeconds = delayNumber ?[delayNumber doubleValue] / 1000.0 : 0.668; - _springTimer = [[NSTimer scheduledTimerWithTimeInterval:delaySeconds + _springTimer = [NSTimer scheduledTimerWithTimeInterval:delaySeconds target:self selector:@selector(fireSpring:) userInfo:sender - repeats:NO] retain]; + repeats:NO]; } return NSDragOperationCopy; } @@ -1750,7 +1669,7 @@ - (NSDragOperation)draggingUpdated:(id )sender { - (void)draggingExited:(id )sender { [_springTimer invalidate]; - [_springTimer release]; _springTimer = nil; + _springTimer = nil; [[PSMTabDragAssistant sharedDragAssistant] draggingExitedTabBarControl:self]; } @@ -1790,7 +1709,7 @@ - (void)fireSpring:(NSTimer *)timer { _tabViewItemWithSpring = nil; [_springTimer invalidate]; - [_springTimer release]; _springTimer = nil; + _springTimer = nil; } #pragma mark - @@ -1807,7 +1726,6 @@ - (void)closeTabClick:(id)sender { return; } - [sender retain]; if (([self delegate]) && ([[self delegate] respondsToSelector:@selector(tabView:shouldCloseTabViewItem:)])) { if (![[self delegate] tabView:tabView shouldCloseTabViewItem:[sender representedObject]]) { @@ -1821,15 +1739,14 @@ - (void)closeTabClick:(id)sender { [[self delegate] tabView:tabView willCloseTabViewItem:[sender representedObject]]; } - [[sender representedObject] retain]; + [sender representedObject]; [tabView removeTabViewItem:[sender representedObject]]; if (([self delegate]) && ([[self delegate] respondsToSelector:@selector(tabView:didCloseTabViewItem:)])) { [[self delegate] tabView:tabView didCloseTabViewItem:[sender representedObject]]; } - [[sender representedObject] release]; + [sender representedObject]; - [sender release]; } - (void)tabClick:(id)sender { @@ -1969,23 +1886,19 @@ - (void)tabView:(NSTabView *)aTabView didSelectTabViewItem:(NSTabViewItem *)tabV NSInteger tabIndex = [aTabView indexOfTabViewItem:tabViewItem]; if([_cells count] > 0 && tabIndex < [_cells count]) { - PSMTabBarCell *thisCell = [_cells objectAtIndex:tabIndex]; + PSMTabBarCell *thisCell = _cells[tabIndex]; if(_alwaysShowActiveTab && [thisCell isInOverflowMenu]) { //temporarily disable the delegate in order to move the tab to a different index id tempDelegate = [aTabView delegate]; [aTabView setDelegate:nil]; // move it all around first - [tabViewItem retain]; - [thisCell retain]; [aTabView removeTabViewItem:tabViewItem]; [aTabView insertTabViewItem:tabViewItem atIndex:0]; [self removeCellAtIndex:tabIndex]; [self insertCell:thisCell atIndex:0]; [thisCell setIsInOverflowMenu:NO]; //very important else we get a fun recursive loop going - [[_cells objectAtIndex:[_cells count] - 1] setIsInOverflowMenu:YES]; //these 2 lines are pretty uncool and this logic needs to be updated - [thisCell release]; - [tabViewItem release]; + [_cells[[_cells count] - 1] setIsInOverflowMenu:YES]; //these 2 lines are pretty uncool and this logic needs to be updated [aTabView setDelegate:tempDelegate]; @@ -2033,7 +1946,7 @@ - (void)tabViewDidChangeNumberOfTabViewItems:(NSTabView *)aTabView { [self removeTabForCell:cell]; } } - [tmpCellArray release], tmpCellArray = nil; + tmpCellArray = nil; // go through tab view items, add cell for any not present NSMutableArray *cellItems = [self representedTabViewItems]; @@ -2108,17 +2021,17 @@ - (id)initWithCoder:(NSCoder *)aDecoder if (self) { // Initialization [self initAddedProperties]; - [self registerForDraggedTypes:[NSArray arrayWithObjects:@"PSMTabBarControlItemPBType", nil]]; + [self registerForDraggedTypes:@[@"PSMTabBarControlItemPBType"]]; // resize [self setPostsFrameChangedNotifications:YES]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(frameDidChange:) name:NSViewFrameDidChangeNotification object:self]; if ([aDecoder allowsKeyedCoding]) { - _cells = [[aDecoder decodeObjectForKey:@"PSMcells"] retain]; - tabView = [[aDecoder decodeObjectForKey:@"PSMtabView"] retain]; - _overflowPopUpButton = [[aDecoder decodeObjectForKey:@"PSMoverflowPopUpButton"] retain]; - _addTabButton = [[aDecoder decodeObjectForKey:@"PSMaddTabButton"] retain]; - style = [[aDecoder decodeObjectForKey:@"PSMstyle"] retain]; + _cells = [aDecoder decodeObjectForKey:@"PSMcells"]; + tabView = [aDecoder decodeObjectForKey:@"PSMtabView"]; + _overflowPopUpButton = [aDecoder decodeObjectForKey:@"PSMoverflowPopUpButton"]; + _addTabButton = [aDecoder decodeObjectForKey:@"PSMaddTabButton"]; + style = [aDecoder decodeObjectForKey:@"PSMstyle"]; _orientation = (PSMTabBarOrientation)[aDecoder decodeIntegerForKey:@"PSMorientation"]; _canCloseOnlyTab = [aDecoder decodeBoolForKey:@"PSMcanCloseOnlyTab"]; _disableTabClose = [aDecoder decodeBoolForKey:@"PSMdisableTabClose"]; @@ -2133,13 +2046,13 @@ - (id)initWithCoder:(NSCoder *)aDecoder _cellOptimumWidth = [aDecoder decodeIntegerForKey:@"PSMcellOptimumWidth"]; _currentStep = [aDecoder decodeIntegerForKey:@"PSMcurrentStep"]; _isHidden = [aDecoder decodeBoolForKey:@"PSMisHidden"]; - partnerView = [[aDecoder decodeObjectForKey:@"PSMpartnerView"] retain]; + partnerView = [aDecoder decodeObjectForKey:@"PSMpartnerView"]; _awakenedFromNib = [aDecoder decodeBoolForKey:@"PSMawakenedFromNib"]; - _lastMouseDownEvent = [[aDecoder decodeObjectForKey:@"PSMlastMouseDownEvent"] retain]; + _lastMouseDownEvent = [aDecoder decodeObjectForKey:@"PSMlastMouseDownEvent"]; _useOverflowMenu = [aDecoder decodeBoolForKey:@"PSMuseOverflowMenu"]; _automaticallyAnimates = [aDecoder decodeBoolForKey:@"PSMautomaticallyAnimates"]; _alwaysShowActiveTab = [aDecoder decodeBoolForKey:@"PSMalwaysShowActiveTab"]; - delegate = [[aDecoder decodeObjectForKey:@"PSMdelegate"] retain]; + delegate = [aDecoder decodeObjectForKey:@"PSMdelegate"]; } } // [self setTarget:self]; @@ -2157,63 +2070,65 @@ - (void)bindPropertiesForCell:(PSMTabBarCell *)cell andTabViewItem:(NSTabViewIte } - (void)_bindPropertiesForCell:(PSMTabBarCell *)cell andTabViewItem:(NSTabViewItem *)item { + NSObject *identifier = [item identifier]; + // bind the indicator to the represented object's status (if it exists) [[cell indicator] setHidden:YES]; - if([item identifier] != nil) { - if([[[cell representedObject] identifier] respondsToSelector:@selector(isProcessing)]) { + if(identifier != nil) { + if([identifier respondsToSelector:@selector(isProcessing)]) { NSMutableDictionary *bindingOptions = [NSMutableDictionary dictionary]; - [bindingOptions setObject:NSNegateBooleanTransformerName forKey:@"NSValueTransformerName"]; - [[cell indicator] bind:@"animate" toObject:[item identifier] withKeyPath:@"isProcessing" options:nil]; - [[cell indicator] bind:@"hidden" toObject:[item identifier] withKeyPath:@"isProcessing" options:bindingOptions]; - [[item identifier] addObserver:cell forKeyPath:@"isProcessing" options:0 context:nil]; + bindingOptions[@"NSValueTransformerName"] = NSNegateBooleanTransformerName; + [[cell indicator] bind:@"animate" toObject:identifier withKeyPath:@"isProcessing" options:nil]; + [[cell indicator] bind:@"hidden" toObject:identifier withKeyPath:@"isProcessing" options:bindingOptions]; + [identifier addObserver:cell forKeyPath:@"isProcessing" options:0 context:nil]; } } // bind for the existence of an icon [cell setHasIcon:NO]; - if([item identifier] != nil) { - if([[[cell representedObject] identifier] respondsToSelector:@selector(icon)]) { + if(item != nil) { + if([identifier respondsToSelector:@selector(icon)]) { NSMutableDictionary *bindingOptions = [NSMutableDictionary dictionary]; - [bindingOptions setObject:NSIsNotNilTransformerName forKey:@"NSValueTransformerName"]; - [cell bind:@"hasIcon" toObject:[item identifier] withKeyPath:@"icon" options:bindingOptions]; - [[item identifier] addObserver:cell forKeyPath:@"icon" options:0 context:nil]; + bindingOptions[@"NSValueTransformerName"] = NSIsNotNilTransformerName; + [cell bind:@"hasIcon" toObject:identifier withKeyPath:@"icon" options:bindingOptions]; + [identifier addObserver:cell forKeyPath:@"icon" options:0 context:nil]; } } // bind for the existence of a counter [cell setCount:0]; - if([item identifier] != nil) { - if([[[cell representedObject] identifier] respondsToSelector:@selector(objectCount)]) { - [cell bind:@"count" toObject:[item identifier] withKeyPath:@"objectCount" options:nil]; - [[item identifier] addObserver:cell forKeyPath:@"objectCount" options:0 context:nil]; + if(identifier != nil) { + if([identifier respondsToSelector:@selector(objectCount)]) { + [cell bind:@"count" toObject:identifier withKeyPath:@"objectCount" options:nil]; + [identifier addObserver:cell forKeyPath:@"objectCount" options:0 context:nil]; } } // bind for the color of a counter [cell setCountColor:nil]; - if([item identifier] != nil) { - if([[[cell representedObject] identifier] respondsToSelector:@selector(countColor)]) { - [cell bind:@"countColor" toObject:[item identifier] withKeyPath:@"countColor" options:nil]; - [[item identifier] addObserver:cell forKeyPath:@"countColor" options:0 context:nil]; + if(identifier != nil) { + if([identifier respondsToSelector:@selector(countColor)]) { + [cell bind:@"countColor" toObject:identifier withKeyPath:@"countColor" options:nil]; + [identifier addObserver:cell forKeyPath:@"countColor" options:0 context:nil]; } } // bind for a large image [cell setHasLargeImage:NO]; - if([item identifier] != nil) { - if([[[cell representedObject] identifier] respondsToSelector:@selector(largeImage)]) { + if(identifier != nil) { + if([identifier respondsToSelector:@selector(largeImage)]) { NSMutableDictionary *bindingOptions = [NSMutableDictionary dictionary]; - [bindingOptions setObject:NSIsNotNilTransformerName forKey:@"NSValueTransformerName"]; - [cell bind:@"hasLargeImage" toObject:[item identifier] withKeyPath:@"largeImage" options:bindingOptions]; - [[item identifier] addObserver:cell forKeyPath:@"largeImage" options:0 context:nil]; + bindingOptions[@"NSValueTransformerName"] = NSIsNotNilTransformerName; + [cell bind:@"hasLargeImage" toObject:identifier withKeyPath:@"largeImage" options:bindingOptions]; + [identifier addObserver:cell forKeyPath:@"largeImage" options:0 context:nil]; } } [cell setIsEdited:NO]; - if([item identifier] != nil) { - if([[[cell representedObject] identifier] respondsToSelector:@selector(isEdited)]) { - [cell bind:@"isEdited" toObject:[item identifier] withKeyPath:@"isEdited" options:nil]; - [[item identifier] addObserver:cell forKeyPath:@"isEdited" options:0 context:nil]; + if(identifier != nil) { + if([identifier respondsToSelector:@selector(isEdited)]) { + [cell bind:@"isEdited" toObject:identifier withKeyPath:@"isEdited" options:nil]; + [identifier addObserver:cell forKeyPath:@"isEdited" options:0 context:nil]; } } @@ -2238,7 +2153,7 @@ - (id)cellForPoint:(NSPoint)point cellFrame:(NSRectPointer)outFrame { NSInteger i, cnt = [_cells count]; for(i = 0; i < cnt; i++) { - PSMTabBarCell *cell = [_cells objectAtIndex:i]; + PSMTabBarCell *cell = _cells[i]; if(NSPointInRect(point, [cell frame])) { if(outFrame) { @@ -2253,15 +2168,15 @@ - (id)cellForPoint:(NSPoint)point cellFrame:(NSRectPointer)outFrame { - (PSMTabBarCell *)lastVisibleTab { NSInteger i, cellCount = [_cells count]; for(i = 0; i < cellCount; i++) { - if([[_cells objectAtIndex:i] isInOverflowMenu]) { + if([_cells[i] isInOverflowMenu]) { if (i == 0) return nil; else - return [_cells objectAtIndex:(i - 1)]; + return _cells[(i - 1)]; } } if (cellCount > 0) - return [_cells objectAtIndex:(cellCount - 1)]; + return _cells[(cellCount - 1)]; else return nil; } @@ -2271,7 +2186,7 @@ - (NSInteger)numberOfVisibleTabs { PSMTabBarCell *nextCell; for(i = 0; i < [_cells count]; i++) { - nextCell = [_cells objectAtIndex:i]; + nextCell = _cells[i]; if([nextCell isInOverflowMenu]) { break; @@ -2297,11 +2212,9 @@ - (NSArray*)accessibilityAttributeNames static NSArray *attributes = nil; if (!attributes) { NSSet *set = [NSSet setWithArray:[super accessibilityAttributeNames]]; - set = [set setByAddingObjectsFromArray:[NSArray arrayWithObjects: - NSAccessibilityTabsAttribute, - NSAccessibilityValueAttribute, - nil]]; - attributes = [[set allObjects] retain]; + set = [set setByAddingObjectsFromArray:@[NSAccessibilityTabsAttribute, + NSAccessibilityValueAttribute]]; + attributes = [set allObjects]; } return attributes; } @@ -2460,7 +2373,7 @@ - (void)_drawInteriorInRect:(NSRect)rect { labelRect.origin.y += 4.0; NSMutableAttributedString *attrStr; NSString *contents = @"PSMTabBarControl"; - attrStr = [[[NSMutableAttributedString alloc] initWithString:contents] autorelease]; + attrStr = [[NSMutableAttributedString alloc] initWithString:contents]; NSRange range = NSMakeRange(0, [contents length]); [attrStr addAttribute:NSFontAttributeName value:[NSFont systemFontOfSize:11.0] range:range]; NSMutableParagraphStyle *centeredParagraphStyle = [[NSParagraphStyle defaultParagraphStyle] mutableCopy]; @@ -2469,7 +2382,6 @@ - (void)_drawInteriorInRect:(NSRect)rect { [attrStr addAttribute:NSParagraphStyleAttributeName value:centeredParagraphStyle range:range]; [attrStr drawInRect:labelRect]; - [centeredParagraphStyle release]; return; } diff --git a/Classes/PSMTabBarControl_Private.h b/Classes/PSMTabBarControl_Private.h new file mode 100644 index 0000000..ddd36be --- /dev/null +++ b/Classes/PSMTabBarControl_Private.h @@ -0,0 +1,20 @@ +// +// PSMTabBarControl_Private.h +// PSMTabBarControl +// +// Created by Simon Strandgaard on 01/02/2014. +// Copyright 2014 Simon Strandgaard. All rights reserved. +// + +#import "PSMTabBarControl.h" + +@interface PSMTabBarControl (Private) + +// draw +- (void)update; + +// actions +- (void)tabClick:(id)sender; +- (void)overflowMenuAction:(id)sender; + +@end diff --git a/Source/PSMTabBarController.h b/Classes/PSMTabBarController.h similarity index 100% rename from Source/PSMTabBarController.h rename to Classes/PSMTabBarController.h diff --git a/Source/PSMTabBarController.m b/Classes/PSMTabBarController.m similarity index 88% rename from Source/PSMTabBarController.m rename to Classes/PSMTabBarController.m index 9d2ed12..269d5c4 100644 --- a/Source/PSMTabBarController.m +++ b/Classes/PSMTabBarController.m @@ -8,6 +8,7 @@ #import "PSMTabBarController.h" #import "PSMTabBarControl.h" +#import "PSMTabBarControl_Private.h" #import "PSMTabBarCell.h" #import "PSMTabStyle.h" #import "NSString_AITruncation.h" @@ -38,10 +39,6 @@ - (id)initWithTabBarControl:(PSMTabBarControl *)control { return self; } -- (void)dealloc { - [_cellFrames release]; - [super dealloc]; -} /*! @method overflowMenu @@ -66,7 +63,7 @@ - (NSRect)cellFrameAtIndex:(NSInteger)index { NSRect rect; if(index > -1 && index < [_cellFrames count]) { - rect = [[_cellFrames objectAtIndex:index] rectValue]; + rect = [_cellFrames[index] rectValue]; } else { NSLog(@"cellFrameAtIndex: Invalid index (%ld)", (long)index); rect = NSZeroRect; @@ -109,12 +106,12 @@ - (void)setSelectedCell:(PSMTabBarCell *)cell { NSInteger cellIndex = [cells indexOfObject:cell]; if(cellIndex > 0) { - nextCell = [cells objectAtIndex:cellIndex - 1]; + nextCell = cells[cellIndex - 1]; [nextCell setTabState:[nextCell tabState] | PSMTab_RightIsSelectedMask]; } if(cellIndex < [cells count] - 1) { - nextCell = [cells objectAtIndex:cellIndex + 1]; + nextCell = cells[cellIndex + 1]; [nextCell setTabState:[nextCell tabState] | PSMTab_LeftIsSelectedMask]; } } @@ -160,13 +157,12 @@ - (NSInteger)_shrinkWidths:(NSMutableArray *)newWidths towardMinimum:(NSInteger) changed = NO; for(NSInteger q = (count - 1); q >= 0; q--) { - CGFloat cellWidth = [[newWidths objectAtIndex:q] doubleValue]; + CGFloat cellWidth = [newWidths[q] doubleValue]; if(cellWidth - 1 >= minimum) { cellWidth--; totalWidths--; - [newWidths replaceObjectAtIndex:q - withObject:[NSNumber numberWithDouble:cellWidth]]; + newWidths[q] = @(cellWidth); changed = YES; } @@ -191,7 +187,7 @@ static NSInteger potentialMinimumForArray(NSArray *array, NSInteger minimum){ NSInteger count = [array count]; for(NSInteger i = 0; i < count; i++) { - NSInteger currentValue = [[array objectAtIndex:i] integerValue]; + NSInteger currentValue = [array[i] integerValue]; runningTotal += MIN(currentValue, minimum); } @@ -221,7 +217,7 @@ - (NSArray *)_generateWidthsFromCells:(NSArray *)cells { } for(i = 0; i < cellCount; i++) { - currentCell = [cells objectAtIndex:i]; + currentCell = cells[i]; // supress close button? [currentCell setCloseButtonSuppressed:((cellCount == 1 && [_control canCloseOnlyTab] == NO) || @@ -254,8 +250,8 @@ - (NSArray *)_generateWidthsFromCells:(NSArray *)cells { [newWidths removeAllObjects]; for(j = 0; j < cellCount; j++) { - CGFloat desiredWidth = [[cells objectAtIndex:j] desiredWidthOfCell]; - [newWidths addObject:[NSNumber numberWithDouble:(desiredWidth < averageWidth && [_control sizeCellsToFit]) ? desiredWidth : averageWidth]]; + CGFloat desiredWidth = [cells[j] desiredWidthOfCell]; + [newWidths addObject:@((desiredWidth < averageWidth && [_control sizeCellsToFit]) ? desiredWidth : averageWidth)]; } break; @@ -282,7 +278,7 @@ - (NSArray *)_generateWidthsFromCells:(NSArray *)cells { * * This allows average and minimum aggregates on the NSArray to work. */ - [newWidths addObject:[NSNumber numberWithDouble:width]]; + [newWidths addObject:@(width)]; numberOfVisibleCells++; totalOccupiedWidth += width; @@ -326,8 +322,8 @@ - (NSArray *)_generateWidthsFromCells:(NSArray *)cells { NSInteger q; for(q = numberOfVisibleCells - 1; q >= 0; q--) { NSInteger desiredAddition = (NSInteger)leftoverWidth / (q + 1); - NSInteger newCellWidth = (NSInteger)[[newWidths objectAtIndex:q] doubleValue] + desiredAddition; - [newWidths replaceObjectAtIndex:q withObject:[NSNumber numberWithDouble:newCellWidth]]; + NSInteger newCellWidth = (NSInteger)[newWidths[q] doubleValue] + desiredAddition; + newWidths[q] = @(newCellWidth); leftoverWidth -= desiredAddition; totalOccupiedWidth += desiredAddition; } @@ -345,8 +341,8 @@ - (NSArray *)_generateWidthsFromCells:(NSArray *)cells { NSInteger q; for(q = i - 1; q >= 0; q--) { NSInteger desiredAddition = (NSInteger)leftoverWidth / (q + 1); - NSInteger newCellWidth = (NSInteger)[[newWidths objectAtIndex:q] doubleValue] + desiredAddition; - [newWidths replaceObjectAtIndex:q withObject:[NSNumber numberWithDouble:newCellWidth]]; + NSInteger newCellWidth = (NSInteger)[newWidths[q] doubleValue] + desiredAddition; + newWidths[q] = @(newCellWidth); leftoverWidth -= desiredAddition; } @@ -365,11 +361,11 @@ - (NSArray *)_generateWidthsFromCells:(NSArray *)cells { totalOccupiedWidth = 0; for(q = 0; q < [newWidths count]; q++) { - [newWidths replaceObjectAtIndex:q withObject:[NSNumber numberWithDouble:revisedWidth]]; + newWidths[q] = @(revisedWidth); totalOccupiedWidth += revisedWidth; } // just squeezed this one in... - [newWidths addObject:[NSNumber numberWithDouble:revisedWidth]]; + [newWidths addObject:@(revisedWidth)]; totalOccupiedWidth += revisedWidth; numberOfVisibleCells++; @@ -387,7 +383,7 @@ - (NSArray *)_generateWidthsFromCells:(NSArray *)cells { totalOccupiedWidth = 0; for(q = 0; q < [newWidths count]; q++) { - [newWidths replaceObjectAtIndex:q withObject:[NSNumber numberWithDouble:revisedWidth]]; + newWidths[q] = @(revisedWidth); totalOccupiedWidth += revisedWidth; } } else { @@ -406,7 +402,7 @@ - (NSArray *)_generateWidthsFromCells:(NSArray *)cells { totalOccupiedWidth = 0; for(q = 0; q < [newWidths count]; q++) { - [newWidths replaceObjectAtIndex:q withObject:[NSNumber numberWithDouble:revisedWidth]]; + newWidths[q] = @(revisedWidth); totalOccupiedWidth += revisedWidth; } } @@ -419,13 +415,13 @@ - (NSArray *)_generateWidthsFromCells:(NSArray *)cells { } else { //(totalOccupiedWidth < availableWidth) numberOfVisibleCells = cellCount; - [newWidths addObject:[NSNumber numberWithDouble:width]]; + [newWidths addObject:@(width)]; totalOccupiedWidth += width; } } else { //lay out vertical tabs if(currentOrigin + cellRect.size.height <= [_control availableCellHeight]) { - [newWidths addObject:[NSNumber numberWithDouble:currentOrigin]]; + [newWidths addObject:@(currentOrigin)]; numberOfVisibleCells++; currentOrigin += cellRect.size.height; } else { @@ -437,22 +433,22 @@ - (NSArray *)_generateWidthsFromCells:(NSArray *)cells { //make sure there are at least two items in the horizontal tab bar if([_control orientation] == PSMTabBarHorizontalOrientation) { if(numberOfVisibleCells < 2 && [cells count] > 1) { - PSMTabBarCell *cell1 = [cells objectAtIndex:0], *cell2 = [cells objectAtIndex:1]; + PSMTabBarCell *cell1 = cells[0], *cell2 = cells[1]; NSNumber *cellWidth; [newWidths removeAllObjects]; totalOccupiedWidth = 0; - cellWidth = [NSNumber numberWithDouble:[cell1 desiredWidthOfCell] < availableWidth * 0.5f ?[cell1 desiredWidthOfCell] : availableWidth * 0.5f]; + cellWidth = @([cell1 desiredWidthOfCell] < availableWidth * 0.5f ?[cell1 desiredWidthOfCell] : availableWidth * 0.5f); [newWidths addObject:cellWidth]; totalOccupiedWidth += [cellWidth doubleValue]; - cellWidth = [NSNumber numberWithDouble:[cell2 desiredWidthOfCell] < (availableWidth - totalOccupiedWidth) ?[cell2 desiredWidthOfCell] : (availableWidth - totalOccupiedWidth)]; + cellWidth = @([cell2 desiredWidthOfCell] < (availableWidth - totalOccupiedWidth) ?[cell2 desiredWidthOfCell] : (availableWidth - totalOccupiedWidth)); [newWidths addObject:cellWidth]; totalOccupiedWidth += [cellWidth doubleValue]; if(totalOccupiedWidth < availableWidth) { - [newWidths replaceObjectAtIndex:0 withObject:[NSNumber numberWithDouble:availableWidth - [cellWidth doubleValue]]]; + newWidths[0] = @(availableWidth - [cellWidth doubleValue]); } } } @@ -473,20 +469,20 @@ - (void)_setupCells:(NSArray *)cells withWidths:(NSArray *)widths { NSTabViewItem *selectedTabViewItem = [[_control tabView] selectedTabViewItem]; NSMenuItem *menuItem; - [_overflowMenu release], _overflowMenu = nil; + _overflowMenu = nil; for(i = 0; i < cellCount; i++) { - cell = [cells objectAtIndex:i]; + cell = cells[i]; if(i < [widths count]) { tabState = 0; // set cell frame if([_control orientation] == PSMTabBarHorizontalOrientation) { - cellRect.size.width = [[widths objectAtIndex:i] doubleValue]; + cellRect.size.width = [widths[i] doubleValue]; } else { cellRect.size.width = [_control frame].size.width; - cellRect.origin.y = [[widths objectAtIndex:i] doubleValue]; + cellRect.origin.y = [widths[i] doubleValue]; cellRect.origin.x = 0; } @@ -497,13 +493,13 @@ - (void)_setupCells:(NSArray *)cells withWidths:(NSArray *)widths { tabState |= PSMTab_SelectedMask; // previous cell if(i > 0) { - [[cells objectAtIndex:i - 1] setTabState:([(PSMTabBarCell *)[cells objectAtIndex:i - 1] tabState] | PSMTab_RightIsSelectedMask)]; + [cells[i - 1] setTabState:([(PSMTabBarCell *)cells[i - 1] tabState] | PSMTab_RightIsSelectedMask)]; } // next cell - see below } else { [cell setState:NSOffState]; // see if prev cell was selected - if((i > 0) && ([[cells objectAtIndex:i - 1] state] == NSOnState)) { + if((i > 0) && ([cells[i - 1] state] == NSOnState)) { tabState |= PSMTab_LeftIsSelectedMask; } } @@ -530,7 +526,7 @@ - (void)_setupCells:(NSArray *)cells withWidths:(NSArray *)widths { // next... if ([_control orientation] == PSMTabBarHorizontalOrientation) - cellRect.origin.x += [[widths objectAtIndex:i] doubleValue]; + cellRect.origin.x += [widths[i] doubleValue]; else cellRect.origin.y += cellRect.size.height; } else { diff --git a/Source/PSMTabDragAssistant.h b/Classes/PSMTabDragAssistant.h similarity index 100% rename from Source/PSMTabDragAssistant.h rename to Classes/PSMTabDragAssistant.h diff --git a/Source/PSMTabDragAssistant.m b/Classes/PSMTabDragAssistant.m similarity index 87% rename from Source/PSMTabDragAssistant.m rename to Classes/PSMTabDragAssistant.m index fd83379..ac0ee99 100644 --- a/Source/PSMTabDragAssistant.m +++ b/Classes/PSMTabDragAssistant.m @@ -10,6 +10,8 @@ #import "PSMTabBarCell.h" #import "PSMTabStyle.h" #import "PSMTabDragWindowController.h" +#import "PSMOverflowPopUpButton.h" +#import "PSMRolloverButton.h" @interface PSMTabBarControl (SharedPrivate) - (void)update:(BOOL)animate; @@ -52,16 +54,6 @@ - (id)init { return self; } -- (void)dealloc { - [_sourceTabBar release]; - [_destinationTabBar release]; - [_participatingTabBars release]; - [_draggedCell release]; - [_animationTimer release]; - [_sineCurveWidths release]; - [_targetCell release]; - [super dealloc]; -} #pragma mark - #pragma mark Accessors @@ -71,8 +63,6 @@ - (PSMTabBarControl *)sourceTabBar { } - (void)setSourceTabBar:(PSMTabBarControl *)tabBar { - [tabBar retain]; - [_sourceTabBar release]; _sourceTabBar = tabBar; } @@ -81,8 +71,6 @@ - (PSMTabBarControl *)destinationTabBar { } - (void)setDestinationTabBar:(PSMTabBarControl *)tabBar { - [tabBar retain]; - [_destinationTabBar release]; _destinationTabBar = tabBar; } @@ -91,8 +79,6 @@ - (PSMTabBarCell *)draggedCell { } - (void)setDraggedCell:(PSMTabBarCell *)cell { - [cell retain]; - [_draggedCell release]; _draggedCell = cell; } @@ -125,8 +111,6 @@ - (PSMTabBarCell *)targetCell { } - (void)setTargetCell:(PSMTabBarCell *)cell { - [cell retain]; - [_targetCell release]; _targetCell = cell; } @@ -147,9 +131,9 @@ - (void)startDraggingCell:(PSMTabBarCell *)cell fromTabBarControl:(PSMTabBarCont CGFloat cellStepSize = ([tabBarControl orientation] == PSMTabBarHorizontalOrientation) ? (cellFrame.size.width + 6) : (cellFrame.size.height + 1); for(i = 0; i < kPSMTabDragAnimationSteps - 1; i++) { NSInteger thisWidth = (NSInteger)(cellStepSize - ((cellStepSize / 2.0) + ((sin((M_PI / 2.0) + ((CGFloat)i / (CGFloat)kPSMTabDragAnimationSteps) * M_PI) * cellStepSize) / 2.0))); - [_sineCurveWidths addObject:[NSNumber numberWithInteger:thisWidth]]; + [_sineCurveWidths addObject:@(thisWidth)]; } - [_sineCurveWidths addObject:[NSNumber numberWithInteger:([tabBarControl orientation] == PSMTabBarHorizontalOrientation) ? cellFrame.size.width : cellFrame.size.height]]; + [_sineCurveWidths addObject:@(([tabBarControl orientation] == PSMTabBarHorizontalOrientation) ? cellFrame.size.width : cellFrame.size.height)]; // hide UI buttons [[tabBarControl overflowPopUpButton] setHidden:YES]; @@ -165,16 +149,20 @@ - (void)startDraggingCell:(PSMTabBarCell *)cell fromTabBarControl:(PSMTabBarCont if([tabBarControl isFlipped]) { cellFrame.origin.y += cellFrame.size.height; } - [cell setHighlighted:NO]; + + //clear all highlights + [[tabBarControl cells] enumerateObjectsUsingBlock:^(id cell, NSUInteger idx, BOOL *stop) { + [cell setHighlighted:NO]; + }]; + NSSize offset = NSZeroSize; - [pboard declareTypes:[NSArray arrayWithObjects:@"PSMTabBarControlItemPBType", nil] owner: nil]; - [pboard setString:[[NSNumber numberWithInteger:[[tabBarControl cells] indexOfObject:cell]] stringValue] forType:@"PSMTabBarControlItemPBType"]; + [pboard declareTypes:@[@"PSMTabBarControlItemPBType"] owner: nil]; + [pboard setString:[@([[tabBarControl cells] indexOfObject:cell]) stringValue] forType:@"PSMTabBarControlItemPBType"]; _animationTimer = [NSTimer scheduledTimerWithTimeInterval:(1.0 / 30.0) target:self selector:@selector(animateDrag:) userInfo:nil repeats:YES]; [[NSNotificationCenter defaultCenter] postNotificationName:PSMTabDragDidBeginNotification object:nil]; //retain the control in case the drag operation causes the control to be released - [tabBarControl retain]; if([tabBarControl delegate] && [[tabBarControl delegate] respondsToSelector:@selector(tabView:shouldDropTabViewItem:inTabBar:)] && [[tabBarControl delegate] tabView:[tabBarControl tabView] shouldDropTabViewItem:[[self draggedCell] representedObject] inTabBar:nil]) { @@ -182,15 +170,18 @@ - (void)startDraggingCell:(PSMTabBarCell *)cell fromTabBarControl:(PSMTabBarCont _draggedTab = [[PSMTabDragWindowController alloc] initWithImage:dragImage styleMask:NSBorderlessWindowMask tearOffStyle:_currentTearOffStyle]; cellFrame.origin.y -= cellFrame.size.height; - [tabBarControl dragImage:[[[NSImage alloc] initWithSize:NSMakeSize(1, 1)] autorelease] at:cellFrame.origin offset:offset event:event pasteboard:pboard source:tabBarControl slideBack:NO]; + [tabBarControl dragImage:[[NSImage alloc] initWithSize:NSMakeSize(1, 1)] at:cellFrame.origin offset:offset event:event pasteboard:pboard source:tabBarControl slideBack:NO]; } else { [tabBarControl dragImage:dragImage at:cellFrame.origin offset:offset event:event pasteboard:pboard source:tabBarControl slideBack:YES]; } - [tabBarControl release]; } - (void)draggingEnteredTabBarControl:(PSMTabBarControl *)tabBarControl atPoint:(NSPoint)mouseLoc { + //don't use the source tab bar if the dragged tab is the only tab in it, this leads to lost tabs + if (tabBarControl == _sourceTabBar && tabBarControl.numberOfVisibleTabs == 0) + return; + if(_currentTearOffStyle == PSMTabBarTearOffMiniwindow && ![self destinationTabBar]) { [_draggedTab switchImages]; } @@ -200,7 +191,7 @@ - (void)draggingEnteredTabBarControl:(PSMTabBarControl *)tabBarControl atPoint:( // hide UI buttons [[tabBarControl overflowPopUpButton] setHidden:YES]; [[tabBarControl addTabButton] setHidden:YES]; - if([[tabBarControl cells] count] == 0 || ![[[tabBarControl cells] objectAtIndex:0] isPlaceholder]) { + if([[tabBarControl cells] count] == 0 || ![[tabBarControl cells][0] isPlaceholder]) { [self distributePlaceholdersInTabBarControl:tabBarControl]; } [_participatingTabBars addObject:tabBarControl]; @@ -217,6 +208,9 @@ - (void)draggingEnteredTabBarControl:(PSMTabBarControl *)tabBarControl atPoint:( } - (void)draggingUpdatedInTabBarControl:(PSMTabBarControl *)tabBarControl atPoint:(NSPoint)mouseLoc { + //don't use the source tab bar if the dragged tab is the only tab in it, this leads to lost tabs + if (tabBarControl == _sourceTabBar && tabBarControl.numberOfVisibleTabs == 0) + return; if([self destinationTabBar] != tabBarControl) { [self setDestinationTabBar:tabBarControl]; @@ -318,8 +312,8 @@ - (void)performDragOperation { NSArray *cells = [[self destinationTabBar] cells]; //find the index of where the dragged cell was just dropped - for(i = 0, insertIndex = 0; (i < [cells count]) && ([cells objectAtIndex:i] != [self draggedCell]); i++, insertIndex++) { - if([[cells objectAtIndex:i] isPlaceholder]) { + for(i = 0, insertIndex = 0; (i < [cells count]) && (cells[i] != [self draggedCell]); i++, insertIndex++) { + if([cells[i] isPlaceholder]) { insertIndex--; } } @@ -330,7 +324,7 @@ - (void)performDragOperation { //calculate the position for the dragged cell if([[self destinationTabBar] automaticallyAnimates]) { if(insertIndex > 0) { - NSRect cellRect = [[cells objectAtIndex:insertIndex - 1] frame]; + NSRect cellRect = [cells[insertIndex - 1] frame]; cellRect.origin.x += cellRect.size.width; [[self draggedCell] setFrame:cellRect]; } @@ -353,17 +347,15 @@ - (void)performDragOperation { NSArray *cells = [[self sourceTabBar] cells]; //find the index of where the dragged cell was just dropped - for(index = 0; index < [cells count] && [cells objectAtIndex:index] != [self draggedCell]; index++) { + for(index = 0; index < [cells count] && cells[index] != [self draggedCell]; index++) { ; } //temporarily disable the delegate in order to move the tab to a different index id tempDelegate = [tabView delegate]; [tabView setDelegate:nil]; - [item retain]; [tabView removeTabViewItem:item]; [tabView insertTabViewItem:item atIndex:index]; - [item release]; if(reselect) { [tabView selectTabViewItem:item]; } @@ -439,13 +431,11 @@ - (void)finishDrag { if(_draggedTab) { [[_draggedTab window] orderOut:nil]; - [_draggedTab release]; _draggedTab = nil; } if(_draggedView) { [[_draggedView window] orderOut:nil]; - [_draggedView release]; _draggedView = nil; } @@ -572,7 +562,7 @@ - (NSImage *)_imageForViewOfCell:(PSMTabBarCell *)cell styleMask:(NSUInteger *)o } else { //the delegate doesn't give a custom image, so use an image of the view NSView *tabView = [[cell representedObject] view]; - viewImage = [[[NSImage alloc] initWithSize:[tabView frame].size] autorelease]; + viewImage = [[NSImage alloc] initWithSize:[tabView frame].size]; [viewImage lockFocus]; [tabView drawRect:[tabView bounds]]; [viewImage unlockFocus]; @@ -587,7 +577,7 @@ - (NSImage *)_imageForViewOfCell:(PSMTabBarCell *)cell styleMask:(NSUInteger *)o - (NSImage *)_miniwindowImageOfWindow:(NSWindow *)window { NSRect rect = [window frame]; - NSImage *image = [[[NSImage alloc] initWithSize:rect.size] autorelease]; + NSImage *image = [[NSImage alloc] initWithSize:rect.size]; [image lockFocus]; rect.origin = NSZeroPoint; CGContextCopyWindowCaptureContentsToRect([[NSGraphicsContext currentContext] graphicsPort], *(CGRect *)&rect, [NSApp contextID], [window windowNumber], 0); @@ -606,15 +596,14 @@ - (void)_expandWindow:(NSWindow *)window atPoint:(NSPoint)point { [animation setAnimationBlockingMode:NSAnimationNonblocking]; [animation setCurrentProgress:0.1]; [animation startAnimation]; - NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0 / 30.0 target:self selector:@selector(_expandWindowTimerFired:) userInfo:[NSDictionary dictionaryWithObjectsAndKeys:window, @"Window", animation, @"Animation", nil] repeats:YES]; - [animation release]; + NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0 / 30.0 target:self selector:@selector(_expandWindowTimerFired:) userInfo:@{@"Window": window, @"Animation": animation} repeats:YES]; [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSEventTrackingRunLoopMode]; } - (void)_expandWindowTimerFired:(NSTimer *)timer { - NSWindow *window = [[timer userInfo] objectForKey:@"Window"]; - NSAnimation *animation = [[timer userInfo] objectForKey:@"Animation"]; + NSWindow *window = [timer userInfo][@"Window"]; + NSAnimation *animation = [timer userInfo][@"Animation"]; CGAffineTransform transform; NSPoint translation; NSRect winFrame = [window frame]; @@ -644,10 +633,10 @@ - (void)_expandWindowTimerFired:(NSTimer *)timer { - (void)animateDrag:(NSTimer *)timer { - NSSet *tabBarControls = [[_participatingTabBars copy] autorelease]; + NSSet *tabBarControls = [_participatingTabBars copy]; for (PSMTabBarControl *tabBarControl in tabBarControls) { [self calculateDragAnimationForTabBarControl:tabBarControl]; - [[NSRunLoop currentRunLoop] performSelector:@selector(display) target:tabBarControl argument:nil order:1 modes:[NSArray arrayWithObjects:@"NSEventTrackingRunLoopMode", @"NSDefaultRunLoopMode", nil]]; + [[NSRunLoop currentRunLoop] performSelector:@selector(display) target:tabBarControl argument:nil order:1 modes:@[@"NSEventTrackingRunLoopMode", @"NSDefaultRunLoopMode"]]; } } @@ -663,7 +652,7 @@ - (void)calculateDragAnimationForTabBarControl:(PSMTabBarControl *)tabBarControl if([self destinationTabBar] == tabBarControl) { removeFlag = NO; if(mouseLoc.x < [[tabBarControl style] leftMarginForTabBarControl:tabBarControl]) { - [self setTargetCell:[cells objectAtIndex:0]]; + [self setTargetCell:cells[0]]; } else { NSRect overCellRect; PSMTabBarCell *overCell = [tabBarControl cellForPoint:mouseLoc cellFrame:&overCellRect]; @@ -675,19 +664,19 @@ - (void)calculateDragAnimationForTabBarControl:(PSMTabBarControl *)tabBarControl // non-placeholders - horizontal orientation if(mouseLoc.x < (overCellRect.origin.x + (overCellRect.size.width / 2.0))) { // mouse on left side of cell - [self setTargetCell:[cells objectAtIndex:([cells indexOfObject:overCell] - 1)]]; + [self setTargetCell:cells[([cells indexOfObject:overCell] - 1)]]; } else { // mouse on right side of cell - [self setTargetCell:[cells objectAtIndex:([cells indexOfObject:overCell] + 1)]]; + [self setTargetCell:cells[([cells indexOfObject:overCell] + 1)]]; } } else { // non-placeholders - vertical orientation if(mouseLoc.y < (overCellRect.origin.y + (overCellRect.size.height / 2.0))) { // mouse on top of cell - [self setTargetCell:[cells objectAtIndex:([cells indexOfObject:overCell] - 1)]]; + [self setTargetCell:cells[([cells indexOfObject:overCell] - 1)]]; } else { // mouse on bottom of cell - [self setTargetCell:[cells objectAtIndex:([cells indexOfObject:overCell] + 1)]]; + [self setTargetCell:cells[([cells indexOfObject:overCell] + 1)]]; } } } else { @@ -700,7 +689,7 @@ - (void)calculateDragAnimationForTabBarControl:(PSMTabBarControl *)tabBarControl } for(i = 0; i < cellCount; i++) { - PSMTabBarCell *cell = [cells objectAtIndex:i]; + PSMTabBarCell *cell = cells[i]; NSRect newRect = [cell frame]; if(![cell isInOverflowMenu]) { if([cell isPlaceholder]) { @@ -714,9 +703,9 @@ - (void)calculateDragAnimationForTabBarControl:(PSMTabBarControl *)tabBarControl } if([tabBarControl orientation] == PSMTabBarHorizontalOrientation) { - newRect.size.width = [[_sineCurveWidths objectAtIndex:[cell currentStep]] integerValue]; + newRect.size.width = [_sineCurveWidths[[cell currentStep]] integerValue]; } else { - newRect.size.height = [[_sineCurveWidths objectAtIndex:[cell currentStep]] integerValue]; + newRect.size.height = [_sineCurveWidths[[cell currentStep]] integerValue]; } } } else { @@ -752,14 +741,14 @@ - (void)distributePlaceholdersInTabBarControl:(PSMTabBarControl *)tabBarControl // replace dragged cell with a placeholder, and clean up surrounding cells NSInteger cellIndex = [cells indexOfObject:cell]; - PSMTabBarCell *pc = [[[PSMTabBarCell alloc] initPlaceholderWithFrame:[[self draggedCell] frame] expanded:YES inTabBarControl:tabBarControl] autorelease]; + PSMTabBarCell *pc = [[PSMTabBarCell alloc] initPlaceholderWithFrame:[[self draggedCell] frame] expanded:YES inTabBarControl:tabBarControl]; [pc setControlView:tabBarControl]; [tabBarControl replaceCellAtIndex:cellIndex withCell:pc]; [tabBarControl removeCellAtIndex:(cellIndex + 1)]; [tabBarControl removeCellAtIndex:(cellIndex - 1)]; if(cellIndex - 2 >= 0) { - pc = [cells objectAtIndex:cellIndex - 2]; + pc = cells[cellIndex - 2]; [pc setTabState:~[pc tabState] & PSMTab_RightIsSelectedMask]; } } @@ -767,12 +756,12 @@ - (void)distributePlaceholdersInTabBarControl:(PSMTabBarControl *)tabBarControl - (void)distributePlaceholdersInTabBarControl:(PSMTabBarControl *)tabBarControl { NSInteger i, numVisibleTabs = [tabBarControl numberOfVisibleTabs]; for(i = 0; i < numVisibleTabs; i++) { - PSMTabBarCell *pc = [[[PSMTabBarCell alloc] initPlaceholderWithFrame:[[self draggedCell] frame] expanded:NO inTabBarControl:tabBarControl] autorelease]; + PSMTabBarCell *pc = [[PSMTabBarCell alloc] initPlaceholderWithFrame:[[self draggedCell] frame] expanded:NO inTabBarControl:tabBarControl]; [pc setControlView:tabBarControl]; [tabBarControl insertCell:pc atIndex:(2 * i)]; } - PSMTabBarCell *pc = [[[PSMTabBarCell alloc] initPlaceholderWithFrame:[[self draggedCell] frame] expanded:NO inTabBarControl:tabBarControl] autorelease]; + PSMTabBarCell *pc = [[PSMTabBarCell alloc] initPlaceholderWithFrame:[[self draggedCell] frame] expanded:NO inTabBarControl:tabBarControl]; [pc setControlView:tabBarControl]; if([[tabBarControl cells] count] > (2 * numVisibleTabs)) { [tabBarControl insertCell:pc atIndex:(2 * numVisibleTabs)]; @@ -784,7 +773,7 @@ - (void)distributePlaceholdersInTabBarControl:(PSMTabBarControl *)tabBarControl - (void)removeAllPlaceholdersFromTabBarControl:(PSMTabBarControl *)tabBarControl { NSInteger i, cellCount = [[tabBarControl cells] count]; for(i = (cellCount - 1); i >= 0; i--) { - PSMTabBarCell *cell = [[tabBarControl cells] objectAtIndex:i]; + PSMTabBarCell *cell = [tabBarControl cells][i]; if([cell isPlaceholder]) { [tabBarControl removeTabForCell:cell]; } @@ -816,16 +805,16 @@ - (id)initWithCoder:(NSCoder *)aDecoder { //self = [super initWithCoder:aDecoder]; //if (self) { if([aDecoder allowsKeyedCoding]) { - _sourceTabBar = [[aDecoder decodeObjectForKey:@"sourceTabBar"] retain]; - _destinationTabBar = [[aDecoder decodeObjectForKey:@"destinationTabBar"] retain]; - _participatingTabBars = [[aDecoder decodeObjectForKey:@"participatingTabBars"] retain]; - _draggedCell = [[aDecoder decodeObjectForKey:@"draggedCell"] retain]; + _sourceTabBar = [aDecoder decodeObjectForKey:@"sourceTabBar"]; + _destinationTabBar = [aDecoder decodeObjectForKey:@"destinationTabBar"]; + _participatingTabBars = [aDecoder decodeObjectForKey:@"participatingTabBars"]; + _draggedCell = [aDecoder decodeObjectForKey:@"draggedCell"]; _draggedCellIndex = [aDecoder decodeIntegerForKey:@"draggedCellIndex"]; _isDragging = [aDecoder decodeBoolForKey:@"isDragging"]; - _animationTimer = [[aDecoder decodeObjectForKey:@"animationTimer"] retain]; - _sineCurveWidths = [[aDecoder decodeObjectForKey:@"sineCurveWidths"] retain]; + _animationTimer = [aDecoder decodeObjectForKey:@"animationTimer"]; + _sineCurveWidths = [aDecoder decodeObjectForKey:@"sineCurveWidths"]; _currentMouseLoc = [aDecoder decodePointForKey:@"currentMouseLoc"]; - _targetCell = [[aDecoder decodeObjectForKey:@"targetCell"] retain]; + _targetCell = [aDecoder decodeObjectForKey:@"targetCell"]; } //} return self; diff --git a/Source/PSMTabDragView.h b/Classes/PSMTabDragView.h similarity index 100% rename from Source/PSMTabDragView.h rename to Classes/PSMTabDragView.h diff --git a/Source/PSMTabDragView.m b/Classes/PSMTabDragView.m similarity index 85% rename from Source/PSMTabDragView.m rename to Classes/PSMTabDragView.m index 991980b..35283e6 100644 --- a/Source/PSMTabDragView.m +++ b/Classes/PSMTabDragView.m @@ -18,11 +18,6 @@ - (id)initWithFrame:(NSRect)frame { return self; } -- (void)dealloc { - [_image release]; - [_alternateImage release]; - [super dealloc]; -} - (void)drawRect:(NSRect)rect { //1.0 fade means show the primary image @@ -46,8 +41,7 @@ - (NSImage *)image { } - (void)setImage:(NSImage *)image { - [_image release]; - _image = [image retain]; + _image = image; } - (NSImage *)alternateImage { @@ -55,8 +49,7 @@ - (NSImage *)alternateImage { } - (void)setAlternateImage:(NSImage *)image { - [_alternateImage release]; - _alternateImage = [image retain]; + _alternateImage = image; } @end diff --git a/Source/PSMTabDragWindow.h b/Classes/PSMTabDragWindow.h similarity index 100% rename from Source/PSMTabDragWindow.h rename to Classes/PSMTabDragWindow.h diff --git a/Source/PSMTabDragWindow.m b/Classes/PSMTabDragWindow.m similarity index 85% rename from Source/PSMTabDragWindow.m rename to Classes/PSMTabDragWindow.m index d6fcc95..15fbc68 100644 --- a/Source/PSMTabDragWindow.m +++ b/Classes/PSMTabDragWindow.m @@ -12,14 +12,14 @@ @implementation PSMTabDragWindow + (PSMTabDragWindow *)dragWindowWithImage:(NSImage *)image styleMask:(NSUInteger)styleMask { - return [[[PSMTabDragWindow alloc] initWithImage:image styleMask:styleMask] autorelease]; + return [[PSMTabDragWindow alloc] initWithImage:image styleMask:styleMask]; } - (id)initWithImage:(NSImage *)image styleMask:(NSUInteger)styleMask { NSSize size = [image size]; if((self = [super initWithContentRect:NSMakeRect(0, 0, size.width, size.height) styleMask:styleMask backing:NSBackingStoreBuffered defer:NO])) { - _dragView = [[[PSMTabDragView alloc] initWithFrame:NSMakeRect(0, 0, size.width, size.height)] autorelease]; + _dragView = [[PSMTabDragView alloc] initWithFrame:NSMakeRect(0, 0, size.width, size.height)]; [self setContentView:_dragView]; [self setLevel:NSStatusWindowLevel]; [self setIgnoresMouseEvents:YES]; diff --git a/Source/PSMTabDragWindowController.h b/Classes/PSMTabDragWindowController.h similarity index 100% rename from Source/PSMTabDragWindowController.h rename to Classes/PSMTabDragWindowController.h diff --git a/Source/PSMTabDragWindowController.m b/Classes/PSMTabDragWindowController.m similarity index 93% rename from Source/PSMTabDragWindowController.m rename to Classes/PSMTabDragWindowController.m index 3a6e8c6..929b465 100644 --- a/Source/PSMTabDragWindowController.m +++ b/Classes/PSMTabDragWindowController.m @@ -15,7 +15,7 @@ @implementation PSMTabDragWindowController - (id)initWithImage:(NSImage *)image styleMask:(NSUInteger)styleMask tearOffStyle:(PSMTabBarTearOffStyle)tearOffStyle { PSMTabDragWindow *window = [PSMTabDragWindow dragWindowWithImage:image styleMask:styleMask]; if((self = [super initWithWindow:window])) { - _view = [[window dragView] retain]; + _view = [window dragView]; _tearOffStyle = tearOffStyle; if(tearOffStyle == PSMTabBarTearOffMiniwindow) { @@ -33,12 +33,7 @@ - (void)dealloc { [_timer invalidate]; } - if(_animation) { - [_animation release]; - } - [_view release]; - [super dealloc]; } - (NSImage *)image { @@ -69,7 +64,6 @@ - (void)switchImages { //An animation already exists, get the current progress progress = 1.0f - [_animation currentProgress]; [_animation stopAnimation]; - [_animation release]; } //begin animating @@ -102,7 +96,7 @@ - (void)animateTimer:(NSTimer *)timer { [[self window] setFrame:frame display:YES]; if(![_animation isAnimating]) { - [_animation release], _animation = nil; + _animation = nil; [timer invalidate]; _timer = nil; } diff --git a/Source/PSMTabStyle.h b/Classes/PSMTabStyle.h similarity index 100% rename from Source/PSMTabStyle.h rename to Classes/PSMTabStyle.h diff --git a/Classes/PSMTabViewItemIdentifier.h b/Classes/PSMTabViewItemIdentifier.h new file mode 100644 index 0000000..dfa769c --- /dev/null +++ b/Classes/PSMTabViewItemIdentifier.h @@ -0,0 +1,29 @@ +// +// PSMTabViewItemIdentifier.h +// PSMTabBarControl +// + +#import + +@protocol PSMTabViewItemIdentifier +@optional + +// show spinner +- (BOOL)isProcessing; + +// small icon +- (NSImage*)icon; + +// show badge with number inside +- (NSInteger)objectCount; + +// badge color +- (NSColor*)countColor; + +// big icon +- (NSImage*)largeImage; + +// gray out +- (BOOL)isEdited; + +@end diff --git a/Source/PSMUnifiedTabStyle.h b/Classes/PSMUnifiedTabStyle.h similarity index 100% rename from Source/PSMUnifiedTabStyle.h rename to Classes/PSMUnifiedTabStyle.h diff --git a/Source/PSMUnifiedTabStyle.m b/Classes/PSMUnifiedTabStyle.m similarity index 88% rename from Source/PSMUnifiedTabStyle.m rename to Classes/PSMUnifiedTabStyle.m index 3cbf32f..a68c5cd 100644 --- a/Source/PSMUnifiedTabStyle.m +++ b/Classes/PSMUnifiedTabStyle.m @@ -44,19 +44,6 @@ - (id) init { return self; } -- (void)dealloc { - [unifiedCloseButton release]; - [unifiedCloseButtonDown release]; - [unifiedCloseButtonOver release]; - [unifiedCloseDirtyButton release]; - [unifiedCloseDirtyButtonDown release]; - [unifiedCloseDirtyButtonOver release]; - [_addTabButtonImage release]; - [_addTabButtonPressedImage release]; - [_addTabButtonRolloverImage release]; - - [super dealloc]; -} #pragma mark - #pragma mark Control Specific @@ -163,13 +150,11 @@ -(void)drawBezelOfTabCell:(PSMTabBarCell *)cell withFrame:(NSRect)frame inTabBar NSColor *endColor = [NSColor colorWithDeviceWhite:0.663 alpha:1.000]; NSGradient *gradient = [[NSGradient alloc] initWithStartingColor:startColor endingColor:endColor]; [gradient drawInBezierPath:bezier angle:80.0]; - [gradient release]; } else if ([cell isHighlighted]) { NSColor *startColor = [NSColor colorWithDeviceWhite:0.8 alpha:1.000]; NSColor *endColor = [NSColor colorWithDeviceWhite:0.8 alpha:1.000]; NSGradient *gradient = [[NSGradient alloc] initWithStartingColor:startColor endingColor:endColor]; [gradient drawInBezierPath:bezier angle:80.0]; - [gradient release]; } } else { @@ -180,7 +165,6 @@ -(void)drawBezelOfTabCell:(PSMTabBarCell *)cell withFrame:(NSRect)frame inTabBar [[NSGraphicsContext currentContext] setShouldAntialias:NO]; [gradient drawInBezierPath:bezier angle:90.0]; [[NSGraphicsContext currentContext] setShouldAntialias:YES]; - [gradient release]; } } @@ -246,7 +230,6 @@ - (void)drawBezelOfTabBarControl:(PSMTabBarControl *)tabBarControl inRect:(NSRec } else { NSGradient *gradient = [[NSGradient alloc] initWithStartingColor:[NSColor colorWithCalibratedWhite:0.835 alpha:1.0] endingColor:[NSColor colorWithCalibratedWhite:0.843 alpha:1.0]]; [gradient drawInRect:gradientRect angle:90.0]; - [gradient release]; } [[NSColor colorWithCalibratedWhite:0.576 alpha:1.0] set]; @@ -276,15 +259,15 @@ - (id)initWithCoder:(NSCoder *)aDecoder { // self = [super initWithCoder:aDecoder]; //if (self) { if([aDecoder allowsKeyedCoding]) { - unifiedCloseButton = [[aDecoder decodeObjectForKey:@"unifiedCloseButton"] retain]; - unifiedCloseButtonDown = [[aDecoder decodeObjectForKey:@"unifiedCloseButtonDown"] retain]; - unifiedCloseButtonOver = [[aDecoder decodeObjectForKey:@"unifiedCloseButtonOver"] retain]; - unifiedCloseDirtyButton = [[aDecoder decodeObjectForKey:@"unifiedCloseDirtyButton"] retain]; - unifiedCloseDirtyButtonDown = [[aDecoder decodeObjectForKey:@"unifiedCloseDirtyButtonDown"] retain]; - unifiedCloseDirtyButtonOver = [[aDecoder decodeObjectForKey:@"unifiedCloseDirtyButtonOver"] retain]; - _addTabButtonImage = [[aDecoder decodeObjectForKey:@"addTabButtonImage"] retain]; - _addTabButtonPressedImage = [[aDecoder decodeObjectForKey:@"addTabButtonPressedImage"] retain]; - _addTabButtonRolloverImage = [[aDecoder decodeObjectForKey:@"addTabButtonRolloverImage"] retain]; + unifiedCloseButton = [aDecoder decodeObjectForKey:@"unifiedCloseButton"]; + unifiedCloseButtonDown = [aDecoder decodeObjectForKey:@"unifiedCloseButtonDown"]; + unifiedCloseButtonOver = [aDecoder decodeObjectForKey:@"unifiedCloseButtonOver"]; + unifiedCloseDirtyButton = [aDecoder decodeObjectForKey:@"unifiedCloseDirtyButton"]; + unifiedCloseDirtyButtonDown = [aDecoder decodeObjectForKey:@"unifiedCloseDirtyButtonDown"]; + unifiedCloseDirtyButtonOver = [aDecoder decodeObjectForKey:@"unifiedCloseDirtyButtonOver"]; + _addTabButtonImage = [aDecoder decodeObjectForKey:@"addTabButtonImage"]; + _addTabButtonPressedImage = [aDecoder decodeObjectForKey:@"addTabButtonPressedImage"]; + _addTabButtonRolloverImage = [aDecoder decodeObjectForKey:@"addTabButtonRolloverImage"]; } //} return self; diff --git a/Source/README b/Classes/README similarity index 100% rename from Source/README rename to Classes/README diff --git a/Documents/screenshot1.png b/Documents/screenshot1.png new file mode 100644 index 0000000..a6f62ef Binary files /dev/null and b/Documents/screenshot1.png differ diff --git a/README.mdown b/LICENSE similarity index 57% rename from README.mdown rename to LICENSE index b8268b7..63ca3c4 100644 --- a/README.mdown +++ b/LICENSE @@ -1,29 +1,3 @@ -About dorianj/PSMTabBarControl -=== -PSMTabBarControl remains the best way to have Safari-style tabs in your app. This fork makes it easy to use PSMTabBarControl when developing apps for 10.6, 10.7, and 10.8 using Xcode 4. It is also Retina-ready. - -This fork contains none of the IBPlugin stuff, and removes unnecessary graphics to get a much smaller framework size (about 668kb uncompressed, 232kb deflated). - -If you make any improvements, please submit them as pull requests. - -Building -==== - -To build, simply open a terminal window in the PSMTabBarControl repo and run ./build.sh. The framework will be in build/Release. - -Installing -==== - -Add the .framework bundle to your xcode project, and add it to the Linked Frameworks and Libraries (under Target -> Summary). Next, under Target -> Build Phases, Add a new build phase that copies it to the Frameworks directory of your app. (Add Build Phase > Copy Files. Destination: Frameworks) - -Copying -==== - -This package was originally created by Positive Spin Media, and is BSD licensed. See: http://www.positivespinmedia.com/dev/PSMTabBarControl.html - -License -==== - Copyright © 2005, Positive Spin Media. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/PSMTabBarControl.podspec b/PSMTabBarControl.podspec new file mode 100644 index 0000000..1435077 --- /dev/null +++ b/PSMTabBarControl.podspec @@ -0,0 +1,38 @@ +Pod::Spec.new do |s| + s.name = "PSMTabBarControl" + s.version = "1.0.4" + s.summary = "Safari-style tabs" + s.description = <<-DESC + PSMTabBarControl seeks to provide developers with a high-quality, + easy to use GUI to manage an NSTabView (or subclasses) in a manner + similar to Safari's tabbed browsing implementation. + It attempts to add a few features as well. + + Here's what you get: + + The look + -------- + A control/cell architecture that draws the expected tab appearance below a toolbar or similar view. Included styles work consistently in Aqua, Metal, or customized metal variations by basing fills on the window's background color. Includes drawing of a close button, and rollover states for the close button and tab cell. Also provides pop-up button and menu when tabs overflow available space, and support for individual tab progress indicators, icons, and object counters. Tabs can be drawn sized to fit the string content of the label, or uniformly sized. + + The functionality + ----------------- + Close button removes tabs, click on a tab cell selects. Indicators start, stop, and hide if things are hooked up correctly. + + Extras + ------ + + Supports multi-window drag-and-drop reordering of the tabs with aqua-licious animation. + + DESC + s.homepage = "https://github.com/neoneye/PSMTabBarControl" + s.screenshots = "https://raw.github.com/neoneye/PSMTabBarControl/master/Documents/screenshot1.png" + s.license = 'BSD' + s.author = { "Simon Strandgaard" => "simon@opcoders.com" } + s.source = { :git => "https://github.com/neoneye/PSMTabBarControl.git", :tag => s.version.to_s } + s.platform = :osx, '10.9' + s.osx.deployment_target = '10.9' + s.requires_arc = true + s.source_files = 'Classes/*.{h,m}' + s.resources = 'Assets' + s.public_header_files = 'Classes/*.h' +end diff --git a/PSMTabBarControl.xcodeproj/project.pbxproj b/PSMTabBarControl.xcodeproj/project.pbxproj deleted file mode 100644 index 0bd1588..0000000 --- a/PSMTabBarControl.xcodeproj/project.pbxproj +++ /dev/null @@ -1,810 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXAggregateTarget section */ - 53DF6901067E5B8E0090B5B0 /* All */ = { - isa = PBXAggregateTarget; - buildConfigurationList = C056398708A954F8003078D8 /* Build configuration list for PBXAggregateTarget "All" */; - buildPhases = ( - ); - dependencies = ( - 5A56530315D1E7A700F9EFD5 /* PBXTargetDependency */, - 53DF6905067E5B930090B5B0 /* PBXTargetDependency */, - ); - name = All; - productName = All; - }; -/* End PBXAggregateTarget section */ - -/* Begin PBXBuildFile section */ - 0694F10D15F4EB91000FBC15 /* PSMCardTabStyle.h in Headers */ = {isa = PBXBuildFile; fileRef = 0694F10B15F4EB90000FBC15 /* PSMCardTabStyle.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0694F10E15F4EB91000FBC15 /* PSMCardTabStyle.m in Sources */ = {isa = PBXBuildFile; fileRef = 0694F10C15F4EB90000FBC15 /* PSMCardTabStyle.m */; }; - 069DFB2915EFBDF500FB9F1C /* largeImage.png in Resources */ = {isa = PBXBuildFile; fileRef = 8B3987D51184F19D004462EE /* largeImage.png */; }; - 13F8B89007B43554008AE28D /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DD92D38A0106425D02CA0E72 /* Cocoa.framework */; }; - 8B3988691184F64D004462EE /* NSString_AITruncation.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B39880E1184F40E004462EE /* NSString_AITruncation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8B39886A1184F64D004462EE /* NSString_AITruncation.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B39880F1184F40E004462EE /* NSString_AITruncation.m */; }; - 8B39886B1184F64E004462EE /* PSMAdiumTabStyle.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B3988101184F40E004462EE /* PSMAdiumTabStyle.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8B39886C1184F64E004462EE /* PSMAdiumTabStyle.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B3988111184F40E004462EE /* PSMAdiumTabStyle.m */; }; - 8B39886D1184F650004462EE /* PSMAquaTabStyle.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B3988121184F40E004462EE /* PSMAquaTabStyle.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8B39886E1184F651004462EE /* PSMAquaTabStyle.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B3988131184F40E004462EE /* PSMAquaTabStyle.m */; }; - 8B39886F1184F651004462EE /* PSMMetalTabStyle.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B3988141184F40E004462EE /* PSMMetalTabStyle.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8B3988701184F651004462EE /* PSMMetalTabStyle.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B3988151184F40E004462EE /* PSMMetalTabStyle.m */; }; - 8B3988711184F652004462EE /* PSMOverflowPopUpButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B3988161184F40E004462EE /* PSMOverflowPopUpButton.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8B3988721184F652004462EE /* PSMOverflowPopUpButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B3988171184F40E004462EE /* PSMOverflowPopUpButton.m */; }; - 8B3988731184F653004462EE /* PSMProgressIndicator.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B3988181184F40E004462EE /* PSMProgressIndicator.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8B3988741184F653004462EE /* PSMProgressIndicator.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B3988191184F40E004462EE /* PSMProgressIndicator.m */; }; - 8B3988751184F653004462EE /* PSMRolloverButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B39881A1184F40E004462EE /* PSMRolloverButton.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8B3988761184F654004462EE /* PSMRolloverButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B39881B1184F40E004462EE /* PSMRolloverButton.m */; }; - 8B3988771184F654004462EE /* PSMTabBarCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B39881C1184F40E004462EE /* PSMTabBarCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8B3988781184F655004462EE /* PSMTabBarCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B39881D1184F40E004462EE /* PSMTabBarCell.m */; }; - 8B3988791184F657004462EE /* PSMTabBarControl.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B39881E1184F40E004462EE /* PSMTabBarControl.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8B39887A1184F657004462EE /* PSMTabBarControl.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B39881F1184F40E004462EE /* PSMTabBarControl.m */; }; - 8B39887B1184F658004462EE /* PSMTabBarController.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B3988201184F40E004462EE /* PSMTabBarController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8B39887C1184F658004462EE /* PSMTabBarController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B3988211184F40E004462EE /* PSMTabBarController.m */; }; - 8B39887D1184F658004462EE /* PSMTabDragAssistant.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B3988221184F40E004462EE /* PSMTabDragAssistant.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8B39887E1184F659004462EE /* PSMTabDragAssistant.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B3988231184F40E004462EE /* PSMTabDragAssistant.m */; }; - 8B39887F1184F659004462EE /* PSMTabDragView.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B3988241184F40E004462EE /* PSMTabDragView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8B3988801184F659004462EE /* PSMTabDragView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B3988251184F40E004462EE /* PSMTabDragView.m */; }; - 8B3988811184F65A004462EE /* PSMTabDragWindow.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B3988261184F40E004462EE /* PSMTabDragWindow.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8B3988821184F65A004462EE /* PSMTabDragWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B3988271184F40E004462EE /* PSMTabDragWindow.m */; }; - 8B3988831184F65B004462EE /* PSMTabDragWindowController.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B3988281184F40E004462EE /* PSMTabDragWindowController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8B3988841184F65B004462EE /* PSMTabDragWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B3988291184F40E004462EE /* PSMTabDragWindowController.m */; }; - 8B3988851184F65B004462EE /* PSMTabStyle.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B39882A1184F40E004462EE /* PSMTabStyle.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8B3988861184F65C004462EE /* PSMLiveChatTabStyle.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B39882B1184F40E004462EE /* PSMLiveChatTabStyle.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8B3988871184F65C004462EE /* PSMLiveChatTabStyle.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B39882C1184F40E004462EE /* PSMLiveChatTabStyle.m */; }; - 8B3988931184F668004462EE /* AdiumGradient.png in Resources */ = {isa = PBXBuildFile; fileRef = 8B3987C31184F19D004462EE /* AdiumGradient.png */; }; - 8B3988941184F668004462EE /* AquaTabClose_Front_Pressed.png in Resources */ = {isa = PBXBuildFile; fileRef = 8B3987C41184F19D004462EE /* AquaTabClose_Front_Pressed.png */; }; - 8B3988951184F668004462EE /* AquaTabClose_Front_Rollover.png in Resources */ = {isa = PBXBuildFile; fileRef = 8B3987C51184F19D004462EE /* AquaTabClose_Front_Rollover.png */; }; - 8B3988961184F668004462EE /* AquaTabClose_Front.png in Resources */ = {isa = PBXBuildFile; fileRef = 8B3987C61184F19D004462EE /* AquaTabClose_Front.png */; }; - 8B3988971184F668004462EE /* AquaTabCloseDirty_Front_Pressed.png in Resources */ = {isa = PBXBuildFile; fileRef = 8B3987C71184F19D004462EE /* AquaTabCloseDirty_Front_Pressed.png */; }; - 8B3988981184F668004462EE /* AquaTabCloseDirty_Front_Rollover.png in Resources */ = {isa = PBXBuildFile; fileRef = 8B3987C81184F19D004462EE /* AquaTabCloseDirty_Front_Rollover.png */; }; - 8B3988991184F668004462EE /* AquaTabCloseDirty_Front.png in Resources */ = {isa = PBXBuildFile; fileRef = 8B3987C91184F19D004462EE /* AquaTabCloseDirty_Front.png */; }; - 8B39889A1184F668004462EE /* AquaTabNew.png in Resources */ = {isa = PBXBuildFile; fileRef = 8B3987CA1184F19D004462EE /* AquaTabNew.png */; }; - 8B39889B1184F668004462EE /* AquaTabNewPressed.png in Resources */ = {isa = PBXBuildFile; fileRef = 8B3987CB1184F19D004462EE /* AquaTabNewPressed.png */; }; - 8B39889C1184F668004462EE /* AquaTabNewRollover.png in Resources */ = {isa = PBXBuildFile; fileRef = 8B3987CC1184F19D004462EE /* AquaTabNewRollover.png */; }; - 8B39889D1184F668004462EE /* AquaTabsBackground.png in Resources */ = {isa = PBXBuildFile; fileRef = 8B3987CD1184F19D004462EE /* AquaTabsBackground.png */; }; - 8B39889E1184F668004462EE /* AquaTabsDown.png in Resources */ = {isa = PBXBuildFile; fileRef = 8B3987CE1184F19D004462EE /* AquaTabsDown.png */; }; - 8B39889F1184F668004462EE /* AquaTabsDownGraphite.png in Resources */ = {isa = PBXBuildFile; fileRef = 8B3987CF1184F19D004462EE /* AquaTabsDownGraphite.png */; }; - 8B3988A01184F668004462EE /* AquaTabsDownNonKey.png in Resources */ = {isa = PBXBuildFile; fileRef = 8B3987D01184F19D004462EE /* AquaTabsDownNonKey.png */; }; - 8B3988A11184F668004462EE /* AquaTabsSeparator.png in Resources */ = {isa = PBXBuildFile; fileRef = 8B3987D11184F19D004462EE /* AquaTabsSeparator.png */; }; - 8B3988A21184F668004462EE /* AquaTabsSeparatorDown.png in Resources */ = {isa = PBXBuildFile; fileRef = 8B3987D21184F19D004462EE /* AquaTabsSeparatorDown.png */; }; - 8B3988A81184F668004462EE /* overflowImage.png in Resources */ = {isa = PBXBuildFile; fileRef = 8B3987D81184F19D004462EE /* overflowImage.png */; }; - 8B3988A91184F668004462EE /* overflowImagePressed.png in Resources */ = {isa = PBXBuildFile; fileRef = 8B3987D91184F19D004462EE /* overflowImagePressed.png */; }; - 8B3988AA1184F668004462EE /* pi.png in Resources */ = {isa = PBXBuildFile; fileRef = 8B3987DA1184F19D004462EE /* pi.png */; }; - 8B3988AC1184F668004462EE /* TabClose_Dirty_Pressed.png in Resources */ = {isa = PBXBuildFile; fileRef = 8B3987DC1184F19D004462EE /* TabClose_Dirty_Pressed.png */; }; - 8B3988AD1184F668004462EE /* TabClose_Dirty_Rollover.png in Resources */ = {isa = PBXBuildFile; fileRef = 8B3987DD1184F19D004462EE /* TabClose_Dirty_Rollover.png */; }; - 8B3988AE1184F668004462EE /* TabClose_Dirty.png in Resources */ = {isa = PBXBuildFile; fileRef = 8B3987DE1184F19D004462EE /* TabClose_Dirty.png */; }; - 8B3988AF1184F668004462EE /* TabClose_Front_Pressed.png in Resources */ = {isa = PBXBuildFile; fileRef = 8B3987DF1184F19D004462EE /* TabClose_Front_Pressed.png */; }; - 8B3988B01184F668004462EE /* TabClose_Front_Rollover.png in Resources */ = {isa = PBXBuildFile; fileRef = 8B3987E01184F19D004462EE /* TabClose_Front_Rollover.png */; }; - 8B3988B11184F668004462EE /* TabClose_Front.png in Resources */ = {isa = PBXBuildFile; fileRef = 8B3987E11184F19D004462EE /* TabClose_Front.png */; }; - 8B3988B41184F668004462EE /* TabNewMetal.png in Resources */ = {isa = PBXBuildFile; fileRef = 8B3987E41184F19D004462EE /* TabNewMetal.png */; }; - 8B3988B51184F668004462EE /* TabNewMetalPressed.png in Resources */ = {isa = PBXBuildFile; fileRef = 8B3987E51184F19D004462EE /* TabNewMetalPressed.png */; }; - 8B3988B61184F668004462EE /* TabNewMetalRollover.png in Resources */ = {isa = PBXBuildFile; fileRef = 8B3987E61184F19D004462EE /* TabNewMetalRollover.png */; }; - 8B7C937811851AA200983F46 /* demo_main.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B7C937711851AA200983F46 /* demo_main.m */; }; - 8BD439621185149500DB4AC3 /* PSMTabBarControl.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 53DF68FD067E5B5A0090B5B0 /* PSMTabBarControl.framework */; }; - 8BD43965118514A600DB4AC3 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DD92D38A0106425D02CA0E72 /* Cocoa.framework */; }; - 8BD4397F1185154600DB4AC3 /* DemoWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BD4397C1185154600DB4AC3 /* DemoWindowController.m */; }; - 8BD439801185154600DB4AC3 /* DemoFakeModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BD4397E1185154600DB4AC3 /* DemoFakeModel.m */; }; - 8BD439811185155300DB4AC3 /* PSMTabBarControlDemo.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8BD4396D118514D800DB4AC3 /* PSMTabBarControlDemo.xib */; }; - 8BD439821185155700DB4AC3 /* DemoAppController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BD4396A118514BA00DB4AC3 /* DemoAppController.m */; }; - 8BD4399E118516A900DB4AC3 /* DemoWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8BD4399D118516A900DB4AC3 /* DemoWindow.xib */; }; - 8BFD0B351185199800F69178 /* PSMTabBarControl.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 53DF68FD067E5B5A0090B5B0 /* PSMTabBarControl.framework */; }; - 97FF179D11EB5938004FA751 /* PSMUnifiedTabStyle.h in Headers */ = {isa = PBXBuildFile; fileRef = 97FF177011EB5711004FA751 /* PSMUnifiedTabStyle.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 97FF179E11EB5938004FA751 /* PSMUnifiedTabStyle.m in Sources */ = {isa = PBXBuildFile; fileRef = 97FF177111EB5711004FA751 /* PSMUnifiedTabStyle.m */; }; - 98CC8D3415CECFC100A40F8B /* AquaTabClose_Front_Pressed@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 98CC8D2F15CECFB900A40F8B /* AquaTabClose_Front_Pressed@2x.png */; }; - 98CC8D3515CECFC100A40F8B /* AquaTabClose_Front_Rollover@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 98CC8D3015CECFB900A40F8B /* AquaTabClose_Front_Rollover@2x.png */; }; - 98CC8D3615CECFC100A40F8B /* AquaTabClose_Front@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 98CC8D3115CECFB900A40F8B /* AquaTabClose_Front@2x.png */; }; - 98CC8D3715CECFC100A40F8B /* overflowImage@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 98CC8D3215CECFB900A40F8B /* overflowImage@2x.png */; }; - 98CC8D3815CECFC100A40F8B /* overflowImagePressed@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 98CC8D3315CECFB900A40F8B /* overflowImagePressed@2x.png */; }; - 98CC8D3F15CEDD8700A40F8B /* AquaTabNewRollover@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 98CC8D3E15CEDD7D00A40F8B /* AquaTabNewRollover@2x.png */; }; - 98CC8D4115CEDE6700A40F8B /* AquaTabNew@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 98CC8D4015CEDE6000A40F8B /* AquaTabNew@2x.png */; }; - 98CC8D4315CEDF8200A40F8B /* AquaTabNewPressed@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 98CC8D4215CEDF7C00A40F8B /* AquaTabNewPressed@2x.png */; }; - 98F1EBAE15F2EDE900A9C5EB /* TabClose_Dirty_Pressed@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 98F1EBA815F2EDE900A9C5EB /* TabClose_Dirty_Pressed@2x.png */; }; - 98F1EBAF15F2EDE900A9C5EB /* TabClose_Dirty_Rollover@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 98F1EBA915F2EDE900A9C5EB /* TabClose_Dirty_Rollover@2x.png */; }; - 98F1EBB015F2EDE900A9C5EB /* TabClose_Dirty@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 98F1EBAA15F2EDE900A9C5EB /* TabClose_Dirty@2x.png */; }; - 98F1EBB115F2EDE900A9C5EB /* TabClose_Front_Pressed@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 98F1EBAB15F2EDE900A9C5EB /* TabClose_Front_Pressed@2x.png */; }; - 98F1EBB215F2EDE900A9C5EB /* TabClose_Front_Rollover@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 98F1EBAC15F2EDE900A9C5EB /* TabClose_Front_Rollover@2x.png */; }; - 98F1EBB315F2EDE900A9C5EB /* TabClose_Front@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 98F1EBAD15F2EDE900A9C5EB /* TabClose_Front@2x.png */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 53DF6904067E5B930090B5B0 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 0259C573FE90428111CA0C5A /* Project object */; - proxyType = 1; - remoteGlobalIDString = 53DF68FC067E5B5A0090B5B0; - remoteInfo = PSMTabBarControlFramework; - }; - 5A56530215D1E7A700F9EFD5 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 0259C573FE90428111CA0C5A /* Project object */; - proxyType = 1; - remoteGlobalIDString = 8BD439591185147D00DB4AC3; - remoteInfo = PSMTabBarControlDemo; - }; - 8BD439631185149C00DB4AC3 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 0259C573FE90428111CA0C5A /* Project object */; - proxyType = 1; - remoteGlobalIDString = 53DF68FC067E5B5A0090B5B0; - remoteInfo = PSMTabBarControlFramework; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXCopyFilesBuildPhase section */ - 8BD4396C118514BA00DB4AC3 /* Copy Frameworks */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - 8BD439621185149500DB4AC3 /* PSMTabBarControl.framework in Copy Frameworks */, - ); - name = "Copy Frameworks"; - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXCopyFilesBuildPhase section */ - -/* Begin PBXFileReference section */ - 0694F10B15F4EB90000FBC15 /* PSMCardTabStyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PSMCardTabStyle.h; path = Source/PSMCardTabStyle.h; sourceTree = ""; }; - 0694F10C15F4EB90000FBC15 /* PSMCardTabStyle.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PSMCardTabStyle.m; path = Source/PSMCardTabStyle.m; sourceTree = ""; }; - 13F8B88807B434F6008AE28D /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; }; - 13F8B88907B434F6008AE28D /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = ""; }; - 13F8B88A07B434F6008AE28D /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; - 53DF68FD067E5B5A0090B5B0 /* PSMTabBarControl.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = PSMTabBarControl.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 53DF68FE067E5B5A0090B5B0 /* PSMTabBarControl-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "PSMTabBarControl-Info.plist"; path = "Source/PSMTabBarControl-Info.plist"; sourceTree = ""; }; - 5A5652F915D1E72F00F9EFD5 /* Base.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Base.xcconfig; sourceTree = ""; }; - 5A5652FA15D1E72F00F9EFD5 /* Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - 5A5652FB15D1E72F00F9EFD5 /* PSMTabBarControlDemo-Base.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "PSMTabBarControlDemo-Base.xcconfig"; sourceTree = ""; }; - 5A5652FC15D1E72F00F9EFD5 /* PSMTabBarControlDemo-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "PSMTabBarControlDemo-Debug.xcconfig"; sourceTree = ""; }; - 5A5652FD15D1E72F00F9EFD5 /* PSMTabBarControlDemo-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "PSMTabBarControlDemo-Release.xcconfig"; sourceTree = ""; }; - 5A5652FE15D1E72F00F9EFD5 /* PSMTabBarControlFramework-Base.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "PSMTabBarControlFramework-Base.xcconfig"; sourceTree = ""; }; - 5A5652FF15D1E72F00F9EFD5 /* PSMTabBarControlFramework-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "PSMTabBarControlFramework-Debug.xcconfig"; sourceTree = ""; }; - 5A56530015D1E72F00F9EFD5 /* PSMTabBarControlFramework-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "PSMTabBarControlFramework-Release.xcconfig"; sourceTree = ""; }; - 5A56530115D1E72F00F9EFD5 /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 8B3987C31184F19D004462EE /* AdiumGradient.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = AdiumGradient.png; path = Resources/AdiumGradient.png; sourceTree = ""; }; - 8B3987C41184F19D004462EE /* AquaTabClose_Front_Pressed.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = AquaTabClose_Front_Pressed.png; path = Resources/AquaTabClose_Front_Pressed.png; sourceTree = ""; }; - 8B3987C51184F19D004462EE /* AquaTabClose_Front_Rollover.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = AquaTabClose_Front_Rollover.png; path = Resources/AquaTabClose_Front_Rollover.png; sourceTree = ""; }; - 8B3987C61184F19D004462EE /* AquaTabClose_Front.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = AquaTabClose_Front.png; path = Resources/AquaTabClose_Front.png; sourceTree = ""; }; - 8B3987C71184F19D004462EE /* AquaTabCloseDirty_Front_Pressed.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = AquaTabCloseDirty_Front_Pressed.png; path = Resources/AquaTabCloseDirty_Front_Pressed.png; sourceTree = ""; }; - 8B3987C81184F19D004462EE /* AquaTabCloseDirty_Front_Rollover.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = AquaTabCloseDirty_Front_Rollover.png; path = Resources/AquaTabCloseDirty_Front_Rollover.png; sourceTree = ""; }; - 8B3987C91184F19D004462EE /* AquaTabCloseDirty_Front.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = AquaTabCloseDirty_Front.png; path = Resources/AquaTabCloseDirty_Front.png; sourceTree = ""; }; - 8B3987CA1184F19D004462EE /* AquaTabNew.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = AquaTabNew.png; path = Resources/AquaTabNew.png; sourceTree = ""; }; - 8B3987CB1184F19D004462EE /* AquaTabNewPressed.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = AquaTabNewPressed.png; path = Resources/AquaTabNewPressed.png; sourceTree = ""; }; - 8B3987CC1184F19D004462EE /* AquaTabNewRollover.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = AquaTabNewRollover.png; path = Resources/AquaTabNewRollover.png; sourceTree = ""; }; - 8B3987CD1184F19D004462EE /* AquaTabsBackground.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = AquaTabsBackground.png; path = Resources/AquaTabsBackground.png; sourceTree = ""; }; - 8B3987CE1184F19D004462EE /* AquaTabsDown.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = AquaTabsDown.png; path = Resources/AquaTabsDown.png; sourceTree = ""; }; - 8B3987CF1184F19D004462EE /* AquaTabsDownGraphite.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = AquaTabsDownGraphite.png; path = Resources/AquaTabsDownGraphite.png; sourceTree = ""; }; - 8B3987D01184F19D004462EE /* AquaTabsDownNonKey.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = AquaTabsDownNonKey.png; path = Resources/AquaTabsDownNonKey.png; sourceTree = ""; }; - 8B3987D11184F19D004462EE /* AquaTabsSeparator.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = AquaTabsSeparator.png; path = Resources/AquaTabsSeparator.png; sourceTree = ""; }; - 8B3987D21184F19D004462EE /* AquaTabsSeparatorDown.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = AquaTabsSeparatorDown.png; path = Resources/AquaTabsSeparatorDown.png; sourceTree = ""; }; - 8B3987D51184F19D004462EE /* largeImage.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = largeImage.png; path = Resources/largeImage.png; sourceTree = ""; }; - 8B3987D81184F19D004462EE /* overflowImage.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = overflowImage.png; path = Resources/overflowImage.png; sourceTree = ""; }; - 8B3987D91184F19D004462EE /* overflowImagePressed.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = overflowImagePressed.png; path = Resources/overflowImagePressed.png; sourceTree = ""; }; - 8B3987DA1184F19D004462EE /* pi.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = pi.png; path = Resources/pi.png; sourceTree = ""; }; - 8B3987DC1184F19D004462EE /* TabClose_Dirty_Pressed.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = TabClose_Dirty_Pressed.png; path = Resources/TabClose_Dirty_Pressed.png; sourceTree = ""; }; - 8B3987DD1184F19D004462EE /* TabClose_Dirty_Rollover.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = TabClose_Dirty_Rollover.png; path = Resources/TabClose_Dirty_Rollover.png; sourceTree = ""; }; - 8B3987DE1184F19D004462EE /* TabClose_Dirty.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = TabClose_Dirty.png; path = Resources/TabClose_Dirty.png; sourceTree = ""; }; - 8B3987DF1184F19D004462EE /* TabClose_Front_Pressed.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = TabClose_Front_Pressed.png; path = Resources/TabClose_Front_Pressed.png; sourceTree = ""; }; - 8B3987E01184F19D004462EE /* TabClose_Front_Rollover.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = TabClose_Front_Rollover.png; path = Resources/TabClose_Front_Rollover.png; sourceTree = ""; }; - 8B3987E11184F19D004462EE /* TabClose_Front.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = TabClose_Front.png; path = Resources/TabClose_Front.png; sourceTree = ""; }; - 8B3987E41184F19D004462EE /* TabNewMetal.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = TabNewMetal.png; path = Resources/TabNewMetal.png; sourceTree = ""; }; - 8B3987E51184F19D004462EE /* TabNewMetalPressed.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = TabNewMetalPressed.png; path = Resources/TabNewMetalPressed.png; sourceTree = ""; }; - 8B3987E61184F19D004462EE /* TabNewMetalRollover.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = TabNewMetalRollover.png; path = Resources/TabNewMetalRollover.png; sourceTree = ""; }; - 8B39880E1184F40E004462EE /* NSString_AITruncation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NSString_AITruncation.h; path = Source/NSString_AITruncation.h; sourceTree = ""; }; - 8B39880F1184F40E004462EE /* NSString_AITruncation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = NSString_AITruncation.m; path = Source/NSString_AITruncation.m; sourceTree = ""; }; - 8B3988101184F40E004462EE /* PSMAdiumTabStyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PSMAdiumTabStyle.h; path = Source/PSMAdiumTabStyle.h; sourceTree = ""; }; - 8B3988111184F40E004462EE /* PSMAdiumTabStyle.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PSMAdiumTabStyle.m; path = Source/PSMAdiumTabStyle.m; sourceTree = ""; }; - 8B3988121184F40E004462EE /* PSMAquaTabStyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PSMAquaTabStyle.h; path = Source/PSMAquaTabStyle.h; sourceTree = ""; }; - 8B3988131184F40E004462EE /* PSMAquaTabStyle.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PSMAquaTabStyle.m; path = Source/PSMAquaTabStyle.m; sourceTree = ""; }; - 8B3988141184F40E004462EE /* PSMMetalTabStyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PSMMetalTabStyle.h; path = Source/PSMMetalTabStyle.h; sourceTree = ""; }; - 8B3988151184F40E004462EE /* PSMMetalTabStyle.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PSMMetalTabStyle.m; path = Source/PSMMetalTabStyle.m; sourceTree = ""; }; - 8B3988161184F40E004462EE /* PSMOverflowPopUpButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PSMOverflowPopUpButton.h; path = Source/PSMOverflowPopUpButton.h; sourceTree = ""; }; - 8B3988171184F40E004462EE /* PSMOverflowPopUpButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PSMOverflowPopUpButton.m; path = Source/PSMOverflowPopUpButton.m; sourceTree = ""; }; - 8B3988181184F40E004462EE /* PSMProgressIndicator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PSMProgressIndicator.h; path = Source/PSMProgressIndicator.h; sourceTree = ""; }; - 8B3988191184F40E004462EE /* PSMProgressIndicator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PSMProgressIndicator.m; path = Source/PSMProgressIndicator.m; sourceTree = ""; }; - 8B39881A1184F40E004462EE /* PSMRolloverButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PSMRolloverButton.h; path = Source/PSMRolloverButton.h; sourceTree = ""; }; - 8B39881B1184F40E004462EE /* PSMRolloverButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PSMRolloverButton.m; path = Source/PSMRolloverButton.m; sourceTree = ""; }; - 8B39881C1184F40E004462EE /* PSMTabBarCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PSMTabBarCell.h; path = Source/PSMTabBarCell.h; sourceTree = ""; }; - 8B39881D1184F40E004462EE /* PSMTabBarCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PSMTabBarCell.m; path = Source/PSMTabBarCell.m; sourceTree = ""; }; - 8B39881E1184F40E004462EE /* PSMTabBarControl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PSMTabBarControl.h; path = Source/PSMTabBarControl.h; sourceTree = ""; }; - 8B39881F1184F40E004462EE /* PSMTabBarControl.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PSMTabBarControl.m; path = Source/PSMTabBarControl.m; sourceTree = ""; }; - 8B3988201184F40E004462EE /* PSMTabBarController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PSMTabBarController.h; path = Source/PSMTabBarController.h; sourceTree = ""; }; - 8B3988211184F40E004462EE /* PSMTabBarController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PSMTabBarController.m; path = Source/PSMTabBarController.m; sourceTree = ""; }; - 8B3988221184F40E004462EE /* PSMTabDragAssistant.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PSMTabDragAssistant.h; path = Source/PSMTabDragAssistant.h; sourceTree = ""; }; - 8B3988231184F40E004462EE /* PSMTabDragAssistant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PSMTabDragAssistant.m; path = Source/PSMTabDragAssistant.m; sourceTree = ""; }; - 8B3988241184F40E004462EE /* PSMTabDragView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PSMTabDragView.h; path = Source/PSMTabDragView.h; sourceTree = ""; }; - 8B3988251184F40E004462EE /* PSMTabDragView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PSMTabDragView.m; path = Source/PSMTabDragView.m; sourceTree = ""; }; - 8B3988261184F40E004462EE /* PSMTabDragWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PSMTabDragWindow.h; path = Source/PSMTabDragWindow.h; sourceTree = ""; }; - 8B3988271184F40E004462EE /* PSMTabDragWindow.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PSMTabDragWindow.m; path = Source/PSMTabDragWindow.m; sourceTree = ""; }; - 8B3988281184F40E004462EE /* PSMTabDragWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PSMTabDragWindowController.h; path = Source/PSMTabDragWindowController.h; sourceTree = ""; }; - 8B3988291184F40E004462EE /* PSMTabDragWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PSMTabDragWindowController.m; path = Source/PSMTabDragWindowController.m; sourceTree = ""; }; - 8B39882A1184F40E004462EE /* PSMTabStyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PSMTabStyle.h; path = Source/PSMTabStyle.h; sourceTree = ""; }; - 8B39882B1184F40E004462EE /* PSMLiveChatTabStyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PSMLiveChatTabStyle.h; path = Source/PSMLiveChatTabStyle.h; sourceTree = ""; }; - 8B39882C1184F40E004462EE /* PSMLiveChatTabStyle.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PSMLiveChatTabStyle.m; path = Source/PSMLiveChatTabStyle.m; sourceTree = ""; }; - 8B7C937711851AA200983F46 /* demo_main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = demo_main.m; path = Source/demo_main.m; sourceTree = ""; }; - 8BD4395A1185147D00DB4AC3 /* PSMTabBarControlDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = PSMTabBarControlDemo.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 8BD4395C1185147D00DB4AC3 /* PSMTabBarControlDemo-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "PSMTabBarControlDemo-Info.plist"; path = "Source/PSMTabBarControlDemo-Info.plist"; sourceTree = ""; }; - 8BD43969118514BA00DB4AC3 /* DemoAppController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DemoAppController.h; path = Source/DemoAppController.h; sourceTree = ""; }; - 8BD4396A118514BA00DB4AC3 /* DemoAppController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = DemoAppController.m; path = Source/DemoAppController.m; sourceTree = ""; }; - 8BD4396D118514D800DB4AC3 /* PSMTabBarControlDemo.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = PSMTabBarControlDemo.xib; path = Resources/PSMTabBarControlDemo.xib; sourceTree = ""; }; - 8BD4397B1185154600DB4AC3 /* DemoWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DemoWindowController.h; path = Source/DemoWindowController.h; sourceTree = ""; }; - 8BD4397C1185154600DB4AC3 /* DemoWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = DemoWindowController.m; path = Source/DemoWindowController.m; sourceTree = ""; }; - 8BD4397D1185154600DB4AC3 /* DemoFakeModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DemoFakeModel.h; path = Source/DemoFakeModel.h; sourceTree = ""; }; - 8BD4397E1185154600DB4AC3 /* DemoFakeModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = DemoFakeModel.m; path = Source/DemoFakeModel.m; sourceTree = ""; }; - 8BD4399D118516A900DB4AC3 /* DemoWindow.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = DemoWindow.xib; path = Resources/DemoWindow.xib; sourceTree = ""; }; - 8D1AC97B0486D23100FE50C9 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = Resources/English.lproj/InfoPlist.strings; sourceTree = ""; }; - 97FF177011EB5711004FA751 /* PSMUnifiedTabStyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PSMUnifiedTabStyle.h; path = Source/PSMUnifiedTabStyle.h; sourceTree = ""; }; - 97FF177111EB5711004FA751 /* PSMUnifiedTabStyle.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PSMUnifiedTabStyle.m; path = Source/PSMUnifiedTabStyle.m; sourceTree = ""; }; - 98CC8D2F15CECFB900A40F8B /* AquaTabClose_Front_Pressed@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "AquaTabClose_Front_Pressed@2x.png"; path = "Resources/AquaTabClose_Front_Pressed@2x.png"; sourceTree = ""; }; - 98CC8D3015CECFB900A40F8B /* AquaTabClose_Front_Rollover@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "AquaTabClose_Front_Rollover@2x.png"; path = "Resources/AquaTabClose_Front_Rollover@2x.png"; sourceTree = ""; }; - 98CC8D3115CECFB900A40F8B /* AquaTabClose_Front@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "AquaTabClose_Front@2x.png"; path = "Resources/AquaTabClose_Front@2x.png"; sourceTree = ""; }; - 98CC8D3215CECFB900A40F8B /* overflowImage@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "overflowImage@2x.png"; path = "Resources/overflowImage@2x.png"; sourceTree = ""; }; - 98CC8D3315CECFB900A40F8B /* overflowImagePressed@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "overflowImagePressed@2x.png"; path = "Resources/overflowImagePressed@2x.png"; sourceTree = ""; }; - 98CC8D3E15CEDD7D00A40F8B /* AquaTabNewRollover@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "AquaTabNewRollover@2x.png"; path = "Resources/AquaTabNewRollover@2x.png"; sourceTree = ""; }; - 98CC8D4015CEDE6000A40F8B /* AquaTabNew@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "AquaTabNew@2x.png"; path = "Resources/AquaTabNew@2x.png"; sourceTree = ""; }; - 98CC8D4215CEDF7C00A40F8B /* AquaTabNewPressed@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "AquaTabNewPressed@2x.png"; path = "Resources/AquaTabNewPressed@2x.png"; sourceTree = ""; }; - 98F1EBA815F2EDE900A9C5EB /* TabClose_Dirty_Pressed@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "TabClose_Dirty_Pressed@2x.png"; path = "Resources/TabClose_Dirty_Pressed@2x.png"; sourceTree = ""; }; - 98F1EBA915F2EDE900A9C5EB /* TabClose_Dirty_Rollover@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "TabClose_Dirty_Rollover@2x.png"; path = "Resources/TabClose_Dirty_Rollover@2x.png"; sourceTree = ""; }; - 98F1EBAA15F2EDE900A9C5EB /* TabClose_Dirty@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "TabClose_Dirty@2x.png"; path = "Resources/TabClose_Dirty@2x.png"; sourceTree = ""; }; - 98F1EBAB15F2EDE900A9C5EB /* TabClose_Front_Pressed@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "TabClose_Front_Pressed@2x.png"; path = "Resources/TabClose_Front_Pressed@2x.png"; sourceTree = ""; }; - 98F1EBAC15F2EDE900A9C5EB /* TabClose_Front_Rollover@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "TabClose_Front_Rollover@2x.png"; path = "Resources/TabClose_Front_Rollover@2x.png"; sourceTree = ""; }; - 98F1EBAD15F2EDE900A9C5EB /* TabClose_Front@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "TabClose_Front@2x.png"; path = "Resources/TabClose_Front@2x.png"; sourceTree = ""; }; - C0D069550A49DF9100C95564 /* InterfaceBuilderKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = InterfaceBuilderKit.framework; path = /Developer/Library/Frameworks/InterfaceBuilderKit.framework; sourceTree = ""; }; - DD92D38A0106425D02CA0E72 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 53DF68FB067E5B5A0090B5B0 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 13F8B89007B43554008AE28D /* Cocoa.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 8BD439581185147D00DB4AC3 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 8BD43965118514A600DB4AC3 /* Cocoa.framework in Frameworks */, - 8BFD0B351185199800F69178 /* PSMTabBarControl.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 0259C574FE90428111CA0C5A /* PSMTabBarControl */ = { - isa = PBXGroup; - children = ( - 8BD439551185146A00DB4AC3 /* Demo */, - 54D33B2C06778E4400C9C163 /* Framework */, - 5A5652F815D1E72F00F9EFD5 /* xcconfigs */, - 1ED78706FE9D4A0611CA0C5A /* Products */, - 2E58F364FFB232C311CA0CBA /* Frameworks */, - ); - name = PSMTabBarControl; - sourceTree = ""; - }; - 0259C582FE90428111CA0C5A /* Resources */ = { - isa = PBXGroup; - children = ( - 8B3987C31184F19D004462EE /* AdiumGradient.png */, - 8B3987C41184F19D004462EE /* AquaTabClose_Front_Pressed.png */, - 8B3987C51184F19D004462EE /* AquaTabClose_Front_Rollover.png */, - 98CC8D3015CECFB900A40F8B /* AquaTabClose_Front_Rollover@2x.png */, - 8B3987C61184F19D004462EE /* AquaTabClose_Front.png */, - 98CC8D3115CECFB900A40F8B /* AquaTabClose_Front@2x.png */, - 8B3987C71184F19D004462EE /* AquaTabCloseDirty_Front_Pressed.png */, - 98CC8D2F15CECFB900A40F8B /* AquaTabClose_Front_Pressed@2x.png */, - 8B3987C81184F19D004462EE /* AquaTabCloseDirty_Front_Rollover.png */, - 8B3987C91184F19D004462EE /* AquaTabCloseDirty_Front.png */, - 8B3987CA1184F19D004462EE /* AquaTabNew.png */, - 98CC8D4015CEDE6000A40F8B /* AquaTabNew@2x.png */, - 8B3987CB1184F19D004462EE /* AquaTabNewPressed.png */, - 98CC8D4215CEDF7C00A40F8B /* AquaTabNewPressed@2x.png */, - 8B3987CC1184F19D004462EE /* AquaTabNewRollover.png */, - 98CC8D3E15CEDD7D00A40F8B /* AquaTabNewRollover@2x.png */, - 8B3987CD1184F19D004462EE /* AquaTabsBackground.png */, - 8B3987CE1184F19D004462EE /* AquaTabsDown.png */, - 8B3987CF1184F19D004462EE /* AquaTabsDownGraphite.png */, - 8B3987D01184F19D004462EE /* AquaTabsDownNonKey.png */, - 8B3987D11184F19D004462EE /* AquaTabsSeparator.png */, - 8B3987D21184F19D004462EE /* AquaTabsSeparatorDown.png */, - 8B3987D51184F19D004462EE /* largeImage.png */, - 8B3987D81184F19D004462EE /* overflowImage.png */, - 98CC8D3215CECFB900A40F8B /* overflowImage@2x.png */, - 8B3987D91184F19D004462EE /* overflowImagePressed.png */, - 98CC8D3315CECFB900A40F8B /* overflowImagePressed@2x.png */, - 8B3987DA1184F19D004462EE /* pi.png */, - 8B3987DC1184F19D004462EE /* TabClose_Dirty_Pressed.png */, - 98F1EBA815F2EDE900A9C5EB /* TabClose_Dirty_Pressed@2x.png */, - 8B3987DD1184F19D004462EE /* TabClose_Dirty_Rollover.png */, - 98F1EBA915F2EDE900A9C5EB /* TabClose_Dirty_Rollover@2x.png */, - 8B3987DE1184F19D004462EE /* TabClose_Dirty.png */, - 98F1EBAA15F2EDE900A9C5EB /* TabClose_Dirty@2x.png */, - 8B3987DF1184F19D004462EE /* TabClose_Front_Pressed.png */, - 98F1EBAB15F2EDE900A9C5EB /* TabClose_Front_Pressed@2x.png */, - 8B3987E01184F19D004462EE /* TabClose_Front_Rollover.png */, - 98F1EBAC15F2EDE900A9C5EB /* TabClose_Front_Rollover@2x.png */, - 8B3987E11184F19D004462EE /* TabClose_Front.png */, - 98F1EBAD15F2EDE900A9C5EB /* TabClose_Front@2x.png */, - 8B3987E41184F19D004462EE /* TabNewMetal.png */, - 8B3987E51184F19D004462EE /* TabNewMetalPressed.png */, - 8B3987E61184F19D004462EE /* TabNewMetalRollover.png */, - 53DF68FE067E5B5A0090B5B0 /* PSMTabBarControl-Info.plist */, - 8D1AC97F0486D23B00FE50C9 /* InfoPlist.strings */, - ); - name = Resources; - sourceTree = ""; - }; - 13F8B6FD07B43410008AE28D /* Linked Frameworks */ = { - isa = PBXGroup; - children = ( - DD92D38A0106425D02CA0E72 /* Cocoa.framework */, - C0D069550A49DF9100C95564 /* InterfaceBuilderKit.framework */, - ); - name = "Linked Frameworks"; - sourceTree = ""; - }; - 13F8B70407B43425008AE28D /* Other Frameworks */ = { - isa = PBXGroup; - children = ( - 13F8B88807B434F6008AE28D /* AppKit.framework */, - 13F8B88907B434F6008AE28D /* CoreData.framework */, - 13F8B88A07B434F6008AE28D /* Foundation.framework */, - ); - name = "Other Frameworks"; - sourceTree = ""; - }; - 1ED78706FE9D4A0611CA0C5A /* Products */ = { - isa = PBXGroup; - children = ( - 53DF68FD067E5B5A0090B5B0 /* PSMTabBarControl.framework */, - 8BD4395A1185147D00DB4AC3 /* PSMTabBarControlDemo.app */, - ); - name = Products; - sourceTree = ""; - }; - 2E58F364FFB232C311CA0CBA /* Frameworks */ = { - isa = PBXGroup; - children = ( - 13F8B6FD07B43410008AE28D /* Linked Frameworks */, - 13F8B70407B43425008AE28D /* Other Frameworks */, - ); - name = Frameworks; - sourceTree = ""; - }; - 54D33B2C06778E4400C9C163 /* Framework */ = { - isa = PBXGroup; - children = ( - C0894DA40C32F4C100401507 /* Classes */, - 0259C582FE90428111CA0C5A /* Resources */, - ); - name = Framework; - sourceTree = ""; - }; - 5A5652F815D1E72F00F9EFD5 /* xcconfigs */ = { - isa = PBXGroup; - children = ( - 5A5652F915D1E72F00F9EFD5 /* Base.xcconfig */, - 5A5652FA15D1E72F00F9EFD5 /* Debug.xcconfig */, - 5A5652FB15D1E72F00F9EFD5 /* PSMTabBarControlDemo-Base.xcconfig */, - 5A5652FC15D1E72F00F9EFD5 /* PSMTabBarControlDemo-Debug.xcconfig */, - 5A5652FD15D1E72F00F9EFD5 /* PSMTabBarControlDemo-Release.xcconfig */, - 5A5652FE15D1E72F00F9EFD5 /* PSMTabBarControlFramework-Base.xcconfig */, - 5A5652FF15D1E72F00F9EFD5 /* PSMTabBarControlFramework-Debug.xcconfig */, - 5A56530015D1E72F00F9EFD5 /* PSMTabBarControlFramework-Release.xcconfig */, - 5A56530115D1E72F00F9EFD5 /* Release.xcconfig */, - ); - path = xcconfigs; - sourceTree = ""; - }; - 8B549E451185BC1C00740C49 /* Categories */ = { - isa = PBXGroup; - children = ( - 8B39880E1184F40E004462EE /* NSString_AITruncation.h */, - 8B39880F1184F40E004462EE /* NSString_AITruncation.m */, - ); - name = Categories; - sourceTree = ""; - }; - 8B549E461185BC2500740C49 /* Styles */ = { - isa = PBXGroup; - children = ( - 8B39882A1184F40E004462EE /* PSMTabStyle.h */, - 97FF177011EB5711004FA751 /* PSMUnifiedTabStyle.h */, - 97FF177111EB5711004FA751 /* PSMUnifiedTabStyle.m */, - 8B3988101184F40E004462EE /* PSMAdiumTabStyle.h */, - 8B3988111184F40E004462EE /* PSMAdiumTabStyle.m */, - 8B3988121184F40E004462EE /* PSMAquaTabStyle.h */, - 8B3988131184F40E004462EE /* PSMAquaTabStyle.m */, - 8B3988141184F40E004462EE /* PSMMetalTabStyle.h */, - 8B3988151184F40E004462EE /* PSMMetalTabStyle.m */, - 8B39882B1184F40E004462EE /* PSMLiveChatTabStyle.h */, - 8B39882C1184F40E004462EE /* PSMLiveChatTabStyle.m */, - 0694F10B15F4EB90000FBC15 /* PSMCardTabStyle.h */, - 0694F10C15F4EB90000FBC15 /* PSMCardTabStyle.m */, - ); - name = Styles; - sourceTree = ""; - }; - 8BD439551185146A00DB4AC3 /* Demo */ = { - isa = PBXGroup; - children = ( - 8B7C937711851AA200983F46 /* demo_main.m */, - 8BD4395C1185147D00DB4AC3 /* PSMTabBarControlDemo-Info.plist */, - 8BD4396D118514D800DB4AC3 /* PSMTabBarControlDemo.xib */, - 8BD4399D118516A900DB4AC3 /* DemoWindow.xib */, - 8BD43969118514BA00DB4AC3 /* DemoAppController.h */, - 8BD4396A118514BA00DB4AC3 /* DemoAppController.m */, - 8BD4397B1185154600DB4AC3 /* DemoWindowController.h */, - 8BD4397C1185154600DB4AC3 /* DemoWindowController.m */, - 8BD4397D1185154600DB4AC3 /* DemoFakeModel.h */, - 8BD4397E1185154600DB4AC3 /* DemoFakeModel.m */, - ); - name = Demo; - sourceTree = ""; - }; - C0894DA40C32F4C100401507 /* Classes */ = { - isa = PBXGroup; - children = ( - 8B549E461185BC2500740C49 /* Styles */, - 8B549E451185BC1C00740C49 /* Categories */, - 8B3988161184F40E004462EE /* PSMOverflowPopUpButton.h */, - 8B3988171184F40E004462EE /* PSMOverflowPopUpButton.m */, - 8B3988181184F40E004462EE /* PSMProgressIndicator.h */, - 8B3988191184F40E004462EE /* PSMProgressIndicator.m */, - 8B39881A1184F40E004462EE /* PSMRolloverButton.h */, - 8B39881B1184F40E004462EE /* PSMRolloverButton.m */, - 8B39881C1184F40E004462EE /* PSMTabBarCell.h */, - 8B39881D1184F40E004462EE /* PSMTabBarCell.m */, - 8B39881E1184F40E004462EE /* PSMTabBarControl.h */, - 8B39881F1184F40E004462EE /* PSMTabBarControl.m */, - 8B3988201184F40E004462EE /* PSMTabBarController.h */, - 8B3988211184F40E004462EE /* PSMTabBarController.m */, - 8B3988221184F40E004462EE /* PSMTabDragAssistant.h */, - 8B3988231184F40E004462EE /* PSMTabDragAssistant.m */, - 8B3988241184F40E004462EE /* PSMTabDragView.h */, - 8B3988251184F40E004462EE /* PSMTabDragView.m */, - 8B3988261184F40E004462EE /* PSMTabDragWindow.h */, - 8B3988271184F40E004462EE /* PSMTabDragWindow.m */, - 8B3988281184F40E004462EE /* PSMTabDragWindowController.h */, - 8B3988291184F40E004462EE /* PSMTabDragWindowController.m */, - ); - name = Classes; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXHeadersBuildPhase section */ - 53DF68F8067E5B5A0090B5B0 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 0694F10D15F4EB91000FBC15 /* PSMCardTabStyle.h in Headers */, - 97FF179D11EB5938004FA751 /* PSMUnifiedTabStyle.h in Headers */, - 8B3988691184F64D004462EE /* NSString_AITruncation.h in Headers */, - 8B39886B1184F64E004462EE /* PSMAdiumTabStyle.h in Headers */, - 8B39886D1184F650004462EE /* PSMAquaTabStyle.h in Headers */, - 8B39886F1184F651004462EE /* PSMMetalTabStyle.h in Headers */, - 8B3988861184F65C004462EE /* PSMLiveChatTabStyle.h in Headers */, - 8B3988711184F652004462EE /* PSMOverflowPopUpButton.h in Headers */, - 8B3988731184F653004462EE /* PSMProgressIndicator.h in Headers */, - 8B3988751184F653004462EE /* PSMRolloverButton.h in Headers */, - 8B3988771184F654004462EE /* PSMTabBarCell.h in Headers */, - 8B3988791184F657004462EE /* PSMTabBarControl.h in Headers */, - 8B39887B1184F658004462EE /* PSMTabBarController.h in Headers */, - 8B39887D1184F658004462EE /* PSMTabDragAssistant.h in Headers */, - 8B39887F1184F659004462EE /* PSMTabDragView.h in Headers */, - 8B3988811184F65A004462EE /* PSMTabDragWindow.h in Headers */, - 8B3988831184F65B004462EE /* PSMTabDragWindowController.h in Headers */, - 8B3988851184F65B004462EE /* PSMTabStyle.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXHeadersBuildPhase section */ - -/* Begin PBXNativeTarget section */ - 53DF68FC067E5B5A0090B5B0 /* PSMTabBarControlFramework */ = { - isa = PBXNativeTarget; - buildConfigurationList = C056397F08A954F8003078D8 /* Build configuration list for PBXNativeTarget "PSMTabBarControlFramework" */; - buildPhases = ( - 53DF68F8067E5B5A0090B5B0 /* Headers */, - 53DF68F9067E5B5A0090B5B0 /* Resources */, - 53DF68FA067E5B5A0090B5B0 /* Sources */, - 53DF68FB067E5B5A0090B5B0 /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = PSMTabBarControlFramework; - productName = PSMTabBarControlFramework; - productReference = 53DF68FD067E5B5A0090B5B0 /* PSMTabBarControl.framework */; - productType = "com.apple.product-type.framework"; - }; - 8BD439591185147D00DB4AC3 /* PSMTabBarControlDemo */ = { - isa = PBXNativeTarget; - buildConfigurationList = 8BD4395F1185147E00DB4AC3 /* Build configuration list for PBXNativeTarget "PSMTabBarControlDemo" */; - buildPhases = ( - 8BD439561185147D00DB4AC3 /* Resources */, - 8BD439571185147D00DB4AC3 /* Sources */, - 8BD439581185147D00DB4AC3 /* Frameworks */, - 8BD4396C118514BA00DB4AC3 /* Copy Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - 8BD439641185149C00DB4AC3 /* PBXTargetDependency */, - ); - name = PSMTabBarControlDemo; - productName = PSMTabBarControlDemo; - productReference = 8BD4395A1185147D00DB4AC3 /* PSMTabBarControlDemo.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 0259C573FE90428111CA0C5A /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 0430; - }; - buildConfigurationList = C056398B08A954F8003078D8 /* Build configuration list for PBXProject "PSMTabBarControl" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; - hasScannedForEncodings = 1; - knownRegions = ( - English, - Japanese, - French, - German, - ); - mainGroup = 0259C574FE90428111CA0C5A /* PSMTabBarControl */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 53DF6901067E5B8E0090B5B0 /* All */, - 53DF68FC067E5B5A0090B5B0 /* PSMTabBarControlFramework */, - 8BD439591185147D00DB4AC3 /* PSMTabBarControlDemo */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 53DF68F9067E5B5A0090B5B0 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 8B3988931184F668004462EE /* AdiumGradient.png in Resources */, - 8B3988941184F668004462EE /* AquaTabClose_Front_Pressed.png in Resources */, - 8B3988951184F668004462EE /* AquaTabClose_Front_Rollover.png in Resources */, - 8B3988961184F668004462EE /* AquaTabClose_Front.png in Resources */, - 8B3988971184F668004462EE /* AquaTabCloseDirty_Front_Pressed.png in Resources */, - 8B3988981184F668004462EE /* AquaTabCloseDirty_Front_Rollover.png in Resources */, - 8B3988991184F668004462EE /* AquaTabCloseDirty_Front.png in Resources */, - 8B39889A1184F668004462EE /* AquaTabNew.png in Resources */, - 8B39889B1184F668004462EE /* AquaTabNewPressed.png in Resources */, - 8B39889C1184F668004462EE /* AquaTabNewRollover.png in Resources */, - 8B39889D1184F668004462EE /* AquaTabsBackground.png in Resources */, - 8B39889E1184F668004462EE /* AquaTabsDown.png in Resources */, - 8B39889F1184F668004462EE /* AquaTabsDownGraphite.png in Resources */, - 8B3988A01184F668004462EE /* AquaTabsDownNonKey.png in Resources */, - 8B3988A11184F668004462EE /* AquaTabsSeparator.png in Resources */, - 8B3988A21184F668004462EE /* AquaTabsSeparatorDown.png in Resources */, - 8B3988A81184F668004462EE /* overflowImage.png in Resources */, - 8B3988A91184F668004462EE /* overflowImagePressed.png in Resources */, - 8B3988AA1184F668004462EE /* pi.png in Resources */, - 8B3988AC1184F668004462EE /* TabClose_Dirty_Pressed.png in Resources */, - 8B3988AD1184F668004462EE /* TabClose_Dirty_Rollover.png in Resources */, - 8B3988AE1184F668004462EE /* TabClose_Dirty.png in Resources */, - 8B3988AF1184F668004462EE /* TabClose_Front_Pressed.png in Resources */, - 8B3988B01184F668004462EE /* TabClose_Front_Rollover.png in Resources */, - 8B3988B11184F668004462EE /* TabClose_Front.png in Resources */, - 8B3988B41184F668004462EE /* TabNewMetal.png in Resources */, - 8B3988B51184F668004462EE /* TabNewMetalPressed.png in Resources */, - 8B3988B61184F668004462EE /* TabNewMetalRollover.png in Resources */, - 98CC8D3415CECFC100A40F8B /* AquaTabClose_Front_Pressed@2x.png in Resources */, - 98CC8D3515CECFC100A40F8B /* AquaTabClose_Front_Rollover@2x.png in Resources */, - 98CC8D3615CECFC100A40F8B /* AquaTabClose_Front@2x.png in Resources */, - 98CC8D3715CECFC100A40F8B /* overflowImage@2x.png in Resources */, - 98CC8D3815CECFC100A40F8B /* overflowImagePressed@2x.png in Resources */, - 98CC8D3F15CEDD8700A40F8B /* AquaTabNewRollover@2x.png in Resources */, - 98CC8D4115CEDE6700A40F8B /* AquaTabNew@2x.png in Resources */, - 98CC8D4315CEDF8200A40F8B /* AquaTabNewPressed@2x.png in Resources */, - 98F1EBAE15F2EDE900A9C5EB /* TabClose_Dirty_Pressed@2x.png in Resources */, - 98F1EBAF15F2EDE900A9C5EB /* TabClose_Dirty_Rollover@2x.png in Resources */, - 98F1EBB015F2EDE900A9C5EB /* TabClose_Dirty@2x.png in Resources */, - 98F1EBB115F2EDE900A9C5EB /* TabClose_Front_Pressed@2x.png in Resources */, - 98F1EBB215F2EDE900A9C5EB /* TabClose_Front_Rollover@2x.png in Resources */, - 98F1EBB315F2EDE900A9C5EB /* TabClose_Front@2x.png in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 8BD439561185147D00DB4AC3 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 8BD439811185155300DB4AC3 /* PSMTabBarControlDemo.xib in Resources */, - 8BD4399E118516A900DB4AC3 /* DemoWindow.xib in Resources */, - 069DFB2915EFBDF500FB9F1C /* largeImage.png in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 53DF68FA067E5B5A0090B5B0 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 8B39886A1184F64D004462EE /* NSString_AITruncation.m in Sources */, - 8B39886C1184F64E004462EE /* PSMAdiumTabStyle.m in Sources */, - 8B39886E1184F651004462EE /* PSMAquaTabStyle.m in Sources */, - 8B3988701184F651004462EE /* PSMMetalTabStyle.m in Sources */, - 8B3988721184F652004462EE /* PSMOverflowPopUpButton.m in Sources */, - 8B3988741184F653004462EE /* PSMProgressIndicator.m in Sources */, - 8B3988761184F654004462EE /* PSMRolloverButton.m in Sources */, - 8B3988781184F655004462EE /* PSMTabBarCell.m in Sources */, - 8B39887A1184F657004462EE /* PSMTabBarControl.m in Sources */, - 8B39887C1184F658004462EE /* PSMTabBarController.m in Sources */, - 8B39887E1184F659004462EE /* PSMTabDragAssistant.m in Sources */, - 8B3988801184F659004462EE /* PSMTabDragView.m in Sources */, - 8B3988821184F65A004462EE /* PSMTabDragWindow.m in Sources */, - 8B3988841184F65B004462EE /* PSMTabDragWindowController.m in Sources */, - 8B3988871184F65C004462EE /* PSMLiveChatTabStyle.m in Sources */, - 97FF179E11EB5938004FA751 /* PSMUnifiedTabStyle.m in Sources */, - 0694F10E15F4EB91000FBC15 /* PSMCardTabStyle.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 8BD439571185147D00DB4AC3 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 8BD4397F1185154600DB4AC3 /* DemoWindowController.m in Sources */, - 8BD439801185154600DB4AC3 /* DemoFakeModel.m in Sources */, - 8BD439821185155700DB4AC3 /* DemoAppController.m in Sources */, - 8B7C937811851AA200983F46 /* demo_main.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 53DF6905067E5B930090B5B0 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 53DF68FC067E5B5A0090B5B0 /* PSMTabBarControlFramework */; - targetProxy = 53DF6904067E5B930090B5B0 /* PBXContainerItemProxy */; - }; - 5A56530315D1E7A700F9EFD5 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 8BD439591185147D00DB4AC3 /* PSMTabBarControlDemo */; - targetProxy = 5A56530215D1E7A700F9EFD5 /* PBXContainerItemProxy */; - }; - 8BD439641185149C00DB4AC3 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 53DF68FC067E5B5A0090B5B0 /* PSMTabBarControlFramework */; - targetProxy = 8BD439631185149C00DB4AC3 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin PBXVariantGroup section */ - 8D1AC97F0486D23B00FE50C9 /* InfoPlist.strings */ = { - isa = PBXVariantGroup; - children = ( - 8D1AC97B0486D23100FE50C9 /* English */, - ); - name = InfoPlist.strings; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - 8BD4395D1185147E00DB4AC3 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 5A5652FC15D1E72F00F9EFD5 /* PSMTabBarControlDemo-Debug.xcconfig */; - buildSettings = { - }; - name = Debug; - }; - 8BD4395E1185147E00DB4AC3 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 5A5652FD15D1E72F00F9EFD5 /* PSMTabBarControlDemo-Release.xcconfig */; - buildSettings = { - }; - name = Release; - }; - C056398008A954F8003078D8 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 5A5652FF15D1E72F00F9EFD5 /* PSMTabBarControlFramework-Debug.xcconfig */; - buildSettings = { - GCC_ENABLE_OBJC_GC = supported; - ONLY_ACTIVE_ARCH = NO; - }; - name = Debug; - }; - C056398108A954F8003078D8 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 5A56530015D1E72F00F9EFD5 /* PSMTabBarControlFramework-Release.xcconfig */; - buildSettings = { - GCC_ENABLE_OBJC_GC = supported; - }; - name = Release; - }; - C056398808A954F8003078D8 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - PRODUCT_NAME = All; - }; - name = Debug; - }; - C056398908A954F8003078D8 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - PRODUCT_NAME = All; - }; - name = Release; - }; - C056398C08A954F8003078D8 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - }; - name = Debug; - }; - C056398D08A954F8003078D8 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 8BD4395F1185147E00DB4AC3 /* Build configuration list for PBXNativeTarget "PSMTabBarControlDemo" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 8BD4395D1185147E00DB4AC3 /* Debug */, - 8BD4395E1185147E00DB4AC3 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - C056397F08A954F8003078D8 /* Build configuration list for PBXNativeTarget "PSMTabBarControlFramework" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - C056398008A954F8003078D8 /* Debug */, - C056398108A954F8003078D8 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - C056398708A954F8003078D8 /* Build configuration list for PBXAggregateTarget "All" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - C056398808A954F8003078D8 /* Debug */, - C056398908A954F8003078D8 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - C056398B08A954F8003078D8 /* Build configuration list for PBXProject "PSMTabBarControl" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - C056398C08A954F8003078D8 /* Debug */, - C056398D08A954F8003078D8 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 0259C573FE90428111CA0C5A /* Project object */; -} diff --git a/Source/PSMTabBarControlDemo-Info.plist b/Project/Demo/Demo-Info.plist similarity index 100% rename from Source/PSMTabBarControlDemo-Info.plist rename to Project/Demo/Demo-Info.plist diff --git a/Source/DemoAppController.h b/Project/Demo/DemoAppController.h similarity index 100% rename from Source/DemoAppController.h rename to Project/Demo/DemoAppController.h diff --git a/Source/DemoAppController.m b/Project/Demo/DemoAppController.m similarity index 100% rename from Source/DemoAppController.m rename to Project/Demo/DemoAppController.m diff --git a/Source/DemoFakeModel.h b/Project/Demo/DemoFakeModel.h similarity index 69% rename from Source/DemoFakeModel.h rename to Project/Demo/DemoFakeModel.h index b1e19dc..d671606 100644 --- a/Source/DemoFakeModel.h +++ b/Project/Demo/DemoFakeModel.h @@ -7,8 +7,9 @@ // #import +#import "PSMTabViewItemIdentifier.h" -@interface DemoFakeModel : NSObject { +@interface DemoFakeModel : NSObject { BOOL _isProcessing; NSImage *_icon; NSImage *_largeImage; @@ -17,9 +18,9 @@ BOOL _isEdited; } -@property (retain) NSImage *largeImage; -@property (retain) NSImage *icon; -@property (retain) NSString *iconName; +@property (strong) NSImage *largeImage; +@property (strong) NSImage *icon; +@property (strong) NSString *iconName; @property (assign) BOOL isProcessing; @property (assign) NSInteger objectCount; diff --git a/Source/DemoFakeModel.m b/Project/Demo/DemoFakeModel.m similarity index 81% rename from Source/DemoFakeModel.m rename to Project/Demo/DemoFakeModel.m index ead3e44..5f35eec 100644 --- a/Source/DemoFakeModel.m +++ b/Project/Demo/DemoFakeModel.m @@ -33,11 +33,10 @@ - (id)init { -(void)dealloc { - [_icon release], _icon = nil; - [_iconName release], _iconName = nil; - [_largeImage release], _largeImage = nil; + _icon = nil; + _iconName = nil; + _largeImage = nil; - [super dealloc]; } @end diff --git a/Project/Demo/DemoWindow.xib b/Project/Demo/DemoWindow.xib new file mode 100644 index 0000000..d98a3d2 --- /dev/null +++ b/Project/Demo/DemoWindow.xib @@ -0,0 +1,447 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Observe the changes in the reference NSTabView above in response to adding (New Tab from the File menu), rearranging (drag tabs above), removing (close button on above tabs), selecting (click a tab above), and stopping progress (stop button in toolbar). You can also resize the window, and create an overflow of tabs to view the overflow menu. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Source/DemoWindowController.h b/Project/Demo/DemoWindowController.h similarity index 100% rename from Source/DemoWindowController.h rename to Project/Demo/DemoWindowController.h diff --git a/Source/DemoWindowController.m b/Project/Demo/DemoWindowController.m similarity index 96% rename from Source/DemoWindowController.m rename to Project/Demo/DemoWindowController.m index 1236208..7d05c92 100644 --- a/Source/DemoWindowController.m +++ b/Project/Demo/DemoWindowController.m @@ -10,6 +10,7 @@ #import "DemoFakeModel.h" #import "PSMTabBarControl.h" #import "PSMTabStyle.h" +#import "PSMRolloverButton.h" @interface DemoWindowController (PRIVATE) - (void)configureTabBarInitially; @@ -57,14 +58,11 @@ - (void)awakeFromNib { [toolbar setDelegate:self]; [toolbar setAllowsUserCustomization:YES]; [toolbar setAutosavesConfiguration:YES]; - SInt32 MacVersion; - if(Gestalt(gestaltSystemVersion, &MacVersion) == noErr) { - if(MacVersion >= 0x1040) { - // this call is Tiger only - [toolbar setShowsBaselineSeparator:NO]; - } + if ( NSAppKitVersionNumber >= NSAppKitVersionNumber10_4 ) { + // this call is Tiger or better + [toolbar setShowsBaselineSeparator:NO]; } - [[self window] setToolbar:[toolbar autorelease]]; + [[self window] setToolbar:toolbar]; // hook up add tab button [[tabBar addTabButton] setTarget:self]; @@ -94,11 +92,10 @@ - (void)addDefaultTabs { - (IBAction)addNewTab:(id)sender { DemoFakeModel *newModel = [[DemoFakeModel alloc] init]; - NSTabViewItem *newItem = [[(NSTabViewItem*)[NSTabViewItem alloc] initWithIdentifier:newModel] autorelease]; + NSTabViewItem *newItem = [(NSTabViewItem*)[NSTabViewItem alloc] initWithIdentifier:newModel]; [newItem setLabel:@"Untitled"]; [tabView addTabViewItem:newItem]; [tabView selectTabViewItem:newItem]; // this is optional, but expected behavior - [newModel release]; } - (IBAction)closeTab:(id)sender { @@ -115,7 +112,7 @@ - (IBAction)closeTab:(id)sender { [[tabBar delegate] tabView:tabView willCloseTabViewItem:tabViewItem]; } - [tabView removeTabViewItem:[[tabViewItem retain] autorelease]]; + [tabView removeTabViewItem:tabViewItem]; if (([tabBar delegate]) && ([[tabBar delegate] respondsToSelector:@selector(tabView:didCloseTabViewItem:)])) { [[tabBar delegate] tabView:tabView didCloseTabViewItem:tabViewItem]; @@ -177,7 +174,6 @@ - (PSMTabBarControl *)tabBar { } - (void)windowWillClose:(NSNotification *)note { - [self autorelease]; } #pragma mark - @@ -408,17 +404,17 @@ - (void)tabView:(NSTabView*)aTabView didDropTabViewItem:(NSTabViewItem *)tabView - (NSImage *)tabView:(NSTabView *)aTabView imageForTabViewItem:(NSTabViewItem *)tabViewItem offset:(NSSize *)offset styleMask:(NSUInteger *)styleMask { // grabs whole window image - NSImage *viewImage = [[[NSImage alloc] init] autorelease]; + NSImage *viewImage = [[NSImage alloc] init]; NSRect contentFrame = [[[self window] contentView] frame]; [[[self window] contentView] lockFocus]; - NSBitmapImageRep *viewRep = [[[NSBitmapImageRep alloc] initWithFocusedViewRect:contentFrame] autorelease]; + NSBitmapImageRep *viewRep = [[NSBitmapImageRep alloc] initWithFocusedViewRect:contentFrame]; [viewImage addRepresentation:viewRep]; [[[self window] contentView] unlockFocus]; // grabs snapshot of dragged tabViewItem's view (represents content being dragged) NSView *viewForImage = [tabViewItem view]; NSRect viewRect = [viewForImage frame]; - NSImage *tabViewImage = [[[NSImage alloc] initWithSize:viewRect.size] autorelease]; + NSImage *tabViewImage = [[NSImage alloc] initWithSize:viewRect.size]; [tabViewImage lockFocus]; [viewForImage drawRect:[viewForImage bounds]]; [tabViewImage unlockFocus]; @@ -526,7 +522,7 @@ - (NSToolbarItem *)toolbar:(NSToolbar *)toolbar itemForItemIdentifier:(NSString [item setAction:@selector(toggle:)]; } - return [item autorelease]; + return item; } - (NSArray *)toolbarDefaultItemIdentifiers:(NSToolbar*)toolbar { diff --git a/Project/Demo/PSMTabBarControlDemo.xib b/Project/Demo/PSMTabBarControlDemo.xib new file mode 100644 index 0000000..857c349 --- /dev/null +++ b/Project/Demo/PSMTabBarControlDemo.xib @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Source/demo_main.m b/Project/Demo/demo_main.m similarity index 100% rename from Source/demo_main.m rename to Project/Demo/demo_main.m diff --git a/Resources/largeImage.png b/Project/Demo/largeImage.png similarity index 100% rename from Resources/largeImage.png rename to Project/Demo/largeImage.png diff --git a/OriginalGraphics/AquaTabNew.psd b/Project/OriginalGraphics/AquaTabNew.psd similarity index 100% rename from OriginalGraphics/AquaTabNew.psd rename to Project/OriginalGraphics/AquaTabNew.psd diff --git a/OriginalGraphics/AquaTabNewPressed.psd b/Project/OriginalGraphics/AquaTabNewPressed.psd similarity index 100% rename from OriginalGraphics/AquaTabNewPressed.psd rename to Project/OriginalGraphics/AquaTabNewPressed.psd diff --git a/OriginalGraphics/AquaTabNewRollover.psd b/Project/OriginalGraphics/AquaTabNewRollover.psd similarity index 100% rename from OriginalGraphics/AquaTabNewRollover.psd rename to Project/OriginalGraphics/AquaTabNewRollover.psd diff --git a/PSMTabBarControl.xcodeproj/default.pbxuser b/Project/PSMTabBarControl.xcodeproj/default.pbxuser similarity index 100% rename from PSMTabBarControl.xcodeproj/default.pbxuser rename to Project/PSMTabBarControl.xcodeproj/default.pbxuser diff --git a/Project/PSMTabBarControl.xcodeproj/project.pbxproj b/Project/PSMTabBarControl.xcodeproj/project.pbxproj new file mode 100644 index 0000000..9d1ffbc --- /dev/null +++ b/Project/PSMTabBarControl.xcodeproj/project.pbxproj @@ -0,0 +1,307 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 4235F99318731C8C00F7B45D /* DemoWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4235F99218731C8C00F7B45D /* DemoWindow.xib */; }; + 4235F99518731CC000F7B45D /* PSMTabBarControlDemo.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4235F99418731CC000F7B45D /* PSMTabBarControlDemo.xib */; }; + 428363C518731A1800D2570F /* demo_main.m in Sources */ = {isa = PBXBuildFile; fileRef = 428363BD18731A1800D2570F /* demo_main.m */; }; + 428363C618731A1800D2570F /* DemoAppController.m in Sources */ = {isa = PBXBuildFile; fileRef = 428363BF18731A1800D2570F /* DemoAppController.m */; }; + 428363C718731A1800D2570F /* DemoFakeModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 428363C118731A1800D2570F /* DemoFakeModel.m */; }; + 428363C818731A1800D2570F /* DemoWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 428363C318731A1800D2570F /* DemoWindowController.m */; }; + 429F2E981876793100D89B7B /* largeImage.png in Resources */ = {isa = PBXBuildFile; fileRef = 429F2E971876793100D89B7B /* largeImage.png */; }; + 8BD43965118514A600DB4AC3 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DD92D38A0106425D02CA0E72 /* Cocoa.framework */; }; + E128A241B35E41CA82C66C74 /* libPods-Demo.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3A4A80FA4849450FBEDD041B /* libPods-Demo.a */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 8BD4396C118514BA00DB4AC3 /* Copy Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Copy Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 13F8B88807B434F6008AE28D /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; }; + 13F8B88907B434F6008AE28D /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = ""; }; + 13F8B88A07B434F6008AE28D /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; + 294EF3DE8B164A4D9F75E2C5 /* Pods-Demo.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Demo.xcconfig"; path = "Pods/Pods-Demo.xcconfig"; sourceTree = ""; }; + 3A4A80FA4849450FBEDD041B /* libPods-Demo.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Demo.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 4235F99218731C8C00F7B45D /* DemoWindow.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = DemoWindow.xib; sourceTree = ""; }; + 4235F99418731CC000F7B45D /* PSMTabBarControlDemo.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = PSMTabBarControlDemo.xib; sourceTree = ""; }; + 428363BD18731A1800D2570F /* demo_main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = demo_main.m; sourceTree = ""; }; + 428363BE18731A1800D2570F /* DemoAppController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoAppController.h; sourceTree = ""; }; + 428363BF18731A1800D2570F /* DemoAppController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DemoAppController.m; sourceTree = ""; }; + 428363C018731A1800D2570F /* DemoFakeModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoFakeModel.h; sourceTree = ""; }; + 428363C118731A1800D2570F /* DemoFakeModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DemoFakeModel.m; sourceTree = ""; }; + 428363C218731A1800D2570F /* DemoWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoWindowController.h; sourceTree = ""; }; + 428363C318731A1800D2570F /* DemoWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DemoWindowController.m; sourceTree = ""; }; + 428363C418731A1800D2570F /* Demo-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "Demo-Info.plist"; sourceTree = ""; }; + 429F2E971876793100D89B7B /* largeImage.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = largeImage.png; sourceTree = ""; }; + 8BD4395A1185147D00DB4AC3 /* Demo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Demo.app; sourceTree = BUILT_PRODUCTS_DIR; }; + C0D069550A49DF9100C95564 /* InterfaceBuilderKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = InterfaceBuilderKit.framework; path = /Developer/Library/Frameworks/InterfaceBuilderKit.framework; sourceTree = ""; }; + DD92D38A0106425D02CA0E72 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 8BD439581185147D00DB4AC3 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 8BD43965118514A600DB4AC3 /* Cocoa.framework in Frameworks */, + E128A241B35E41CA82C66C74 /* libPods-Demo.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 0259C574FE90428111CA0C5A /* PSMTabBarControl */ = { + isa = PBXGroup; + children = ( + 8BD439551185146A00DB4AC3 /* Demo */, + 1ED78706FE9D4A0611CA0C5A /* Products */, + 2E58F364FFB232C311CA0CBA /* Frameworks */, + 294EF3DE8B164A4D9F75E2C5 /* Pods-Demo.xcconfig */, + ); + name = PSMTabBarControl; + sourceTree = ""; + }; + 13F8B6FD07B43410008AE28D /* Linked Frameworks */ = { + isa = PBXGroup; + children = ( + DD92D38A0106425D02CA0E72 /* Cocoa.framework */, + C0D069550A49DF9100C95564 /* InterfaceBuilderKit.framework */, + ); + name = "Linked Frameworks"; + sourceTree = ""; + }; + 13F8B70407B43425008AE28D /* Other Frameworks */ = { + isa = PBXGroup; + children = ( + 13F8B88807B434F6008AE28D /* AppKit.framework */, + 13F8B88907B434F6008AE28D /* CoreData.framework */, + 13F8B88A07B434F6008AE28D /* Foundation.framework */, + ); + name = "Other Frameworks"; + sourceTree = ""; + }; + 1ED78706FE9D4A0611CA0C5A /* Products */ = { + isa = PBXGroup; + children = ( + 8BD4395A1185147D00DB4AC3 /* Demo.app */, + ); + name = Products; + sourceTree = ""; + }; + 2E58F364FFB232C311CA0CBA /* Frameworks */ = { + isa = PBXGroup; + children = ( + 13F8B6FD07B43410008AE28D /* Linked Frameworks */, + 13F8B70407B43425008AE28D /* Other Frameworks */, + 3A4A80FA4849450FBEDD041B /* libPods-Demo.a */, + ); + name = Frameworks; + sourceTree = ""; + }; + 8BD439551185146A00DB4AC3 /* Demo */ = { + isa = PBXGroup; + children = ( + 428363C418731A1800D2570F /* Demo-Info.plist */, + 428363BD18731A1800D2570F /* demo_main.m */, + 428363BE18731A1800D2570F /* DemoAppController.h */, + 428363BF18731A1800D2570F /* DemoAppController.m */, + 428363C018731A1800D2570F /* DemoFakeModel.h */, + 428363C118731A1800D2570F /* DemoFakeModel.m */, + 4235F99218731C8C00F7B45D /* DemoWindow.xib */, + 428363C218731A1800D2570F /* DemoWindowController.h */, + 428363C318731A1800D2570F /* DemoWindowController.m */, + 429F2E971876793100D89B7B /* largeImage.png */, + 4235F99418731CC000F7B45D /* PSMTabBarControlDemo.xib */, + ); + path = Demo; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 8BD439591185147D00DB4AC3 /* Demo */ = { + isa = PBXNativeTarget; + buildConfigurationList = 8BD4395F1185147E00DB4AC3 /* Build configuration list for PBXNativeTarget "Demo" */; + buildPhases = ( + 45C52EE9BB014A0E9B6CD92A /* Check Pods Manifest.lock */, + 8BD439561185147D00DB4AC3 /* Resources */, + 8BD439571185147D00DB4AC3 /* Sources */, + 8BD439581185147D00DB4AC3 /* Frameworks */, + 8BD4396C118514BA00DB4AC3 /* Copy Frameworks */, + 82837364C38B43B1B33B4274 /* Copy Pods Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Demo; + productName = PSMTabBarControlDemo; + productReference = 8BD4395A1185147D00DB4AC3 /* Demo.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 0259C573FE90428111CA0C5A /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0500; + }; + buildConfigurationList = C056398B08A954F8003078D8 /* Build configuration list for PBXProject "PSMTabBarControl" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 1; + knownRegions = ( + English, + Japanese, + French, + German, + ); + mainGroup = 0259C574FE90428111CA0C5A /* PSMTabBarControl */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 8BD439591185147D00DB4AC3 /* Demo */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 8BD439561185147D00DB4AC3 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 429F2E981876793100D89B7B /* largeImage.png in Resources */, + 4235F99318731C8C00F7B45D /* DemoWindow.xib in Resources */, + 4235F99518731CC000F7B45D /* PSMTabBarControlDemo.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 45C52EE9BB014A0E9B6CD92A /* Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Check Pods Manifest.lock"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; + showEnvVarsInLog = 0; + }; + 82837364C38B43B1B33B4274 /* Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Copy Pods Resources"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Pods-Demo-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 8BD439571185147D00DB4AC3 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 428363C618731A1800D2570F /* DemoAppController.m in Sources */, + 428363C718731A1800D2570F /* DemoFakeModel.m in Sources */, + 428363C818731A1800D2570F /* DemoWindowController.m in Sources */, + 428363C518731A1800D2570F /* demo_main.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 8BD4395D1185147E00DB4AC3 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 294EF3DE8B164A4D9F75E2C5 /* Pods-Demo.xcconfig */; + buildSettings = { + CLANG_ENABLE_OBJC_ARC = YES; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = "$(SRCROOT)/Demo/Demo-Info.plist"; + PRODUCT_NAME = Demo; + SDKROOT = macosx; + }; + name = Debug; + }; + 8BD4395E1185147E00DB4AC3 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 294EF3DE8B164A4D9F75E2C5 /* Pods-Demo.xcconfig */; + buildSettings = { + CLANG_ENABLE_OBJC_ARC = YES; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = "$(SRCROOT)/Demo/Demo-Info.plist"; + PRODUCT_NAME = Demo; + SDKROOT = macosx; + }; + name = Release; + }; + C056398C08A954F8003078D8 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ONLY_ACTIVE_ARCH = YES; + }; + name = Debug; + }; + C056398D08A954F8003078D8 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 8BD4395F1185147E00DB4AC3 /* Build configuration list for PBXNativeTarget "Demo" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 8BD4395D1185147E00DB4AC3 /* Debug */, + 8BD4395E1185147E00DB4AC3 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + C056398B08A954F8003078D8 /* Build configuration list for PBXProject "PSMTabBarControl" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + C056398C08A954F8003078D8 /* Debug */, + C056398D08A954F8003078D8 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 0259C573FE90428111CA0C5A /* Project object */; +} diff --git a/Project/PSMTabBarControl.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Project/PSMTabBarControl.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..67a1531 --- /dev/null +++ b/Project/PSMTabBarControl.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/Project/PSMTabBarControl.xcodeproj/project.xcworkspace/xcshareddata/PSMTabBarControl.xccheckout b/Project/PSMTabBarControl.xcodeproj/project.xcworkspace/xcshareddata/PSMTabBarControl.xccheckout new file mode 100644 index 0000000..8bee487 --- /dev/null +++ b/Project/PSMTabBarControl.xcodeproj/project.xcworkspace/xcshareddata/PSMTabBarControl.xccheckout @@ -0,0 +1,41 @@ + + + + + IDESourceControlProjectFavoriteDictionaryKey + + IDESourceControlProjectIdentifier + BD0E3604-ACB6-4160-A09D-0FF4F4249C30 + IDESourceControlProjectName + PSMTabBarControl + IDESourceControlProjectOriginsDictionary + + 3576BE13-9255-408F-BDB4-DB2EDE8028A0 + ssh://github.com/neoneye/PSMTabBarControl.git + + IDESourceControlProjectPath + PSMTabBarControl.xcodeproj/project.xcworkspace + IDESourceControlProjectRelativeInstallPathDictionary + + 3576BE13-9255-408F-BDB4-DB2EDE8028A0 + ../.. + + IDESourceControlProjectURL + ssh://github.com/neoneye/PSMTabBarControl.git + IDESourceControlProjectVersion + 110 + IDESourceControlProjectWCCIdentifier + 3576BE13-9255-408F-BDB4-DB2EDE8028A0 + IDESourceControlProjectWCConfigurations + + + IDESourceControlRepositoryExtensionIdentifierKey + public.vcs.git + IDESourceControlWCCIdentifierKey + 3576BE13-9255-408F-BDB4-DB2EDE8028A0 + IDESourceControlWCCName + opcoders_PSMTabBarControl + + + + diff --git a/Project/PSMTabBarControl.xcworkspace/contents.xcworkspacedata b/Project/PSMTabBarControl.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..255e9a0 --- /dev/null +++ b/Project/PSMTabBarControl.xcworkspace/contents.xcworkspacedata @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Project/PSMTabBarControl.xcworkspace/xcshareddata/PSMTabBarControl.xccheckout b/Project/PSMTabBarControl.xcworkspace/xcshareddata/PSMTabBarControl.xccheckout new file mode 100644 index 0000000..98ac82a --- /dev/null +++ b/Project/PSMTabBarControl.xcworkspace/xcshareddata/PSMTabBarControl.xccheckout @@ -0,0 +1,41 @@ + + + + + IDESourceControlProjectFavoriteDictionaryKey + + IDESourceControlProjectIdentifier + AE103123-42C0-4E1C-AB40-5A284578F6F1 + IDESourceControlProjectName + PSMTabBarControl + IDESourceControlProjectOriginsDictionary + + A38187AC-2193-4AA2-8F6C-3740F3525B6C + ssh://github.com/neoneye/PSMTabBarControl.git + + IDESourceControlProjectPath + Project/PSMTabBarControl.xcworkspace + IDESourceControlProjectRelativeInstallPathDictionary + + A38187AC-2193-4AA2-8F6C-3740F3525B6C + ../.. + + IDESourceControlProjectURL + ssh://github.com/neoneye/PSMTabBarControl.git + IDESourceControlProjectVersion + 110 + IDESourceControlProjectWCCIdentifier + A38187AC-2193-4AA2-8F6C-3740F3525B6C + IDESourceControlProjectWCConfigurations + + + IDESourceControlRepositoryExtensionIdentifierKey + public.vcs.git + IDESourceControlWCCIdentifierKey + A38187AC-2193-4AA2-8F6C-3740F3525B6C + IDESourceControlWCCName + opcoders_commander_PSMTabBarControl + + + + diff --git a/Project/Podfile b/Project/Podfile new file mode 100644 index 0000000..a7940be --- /dev/null +++ b/Project/Podfile @@ -0,0 +1,7 @@ +platform :osx, '10.9' + +xcodeproj "PSMTabBarControl" + +target "Demo" do + pod "PSMTabBarControl", :path => "../PSMTabBarControl.podspec" +end diff --git a/Project/Podfile.lock b/Project/Podfile.lock new file mode 100644 index 0000000..3ef5458 --- /dev/null +++ b/Project/Podfile.lock @@ -0,0 +1,14 @@ +PODS: + - PSMTabBarControl (1.0.3) + +DEPENDENCIES: + - PSMTabBarControl (from `../PSMTabBarControl.podspec`) + +EXTERNAL SOURCES: + PSMTabBarControl: + :path: ../PSMTabBarControl.podspec + +SPEC CHECKSUMS: + PSMTabBarControl: 8fe88b3018fda740e455e42913a3af43bbc5db10 + +COCOAPODS: 0.29.0 diff --git a/README.md b/README.md new file mode 100644 index 0000000..a2eaa53 --- /dev/null +++ b/README.md @@ -0,0 +1,30 @@ +# PSMTabBarControl + +![Screenshot](https://raw.github.com/neoneye/PSMTabBarControl/master/Documents/screenshot1.png) + +## Usage + +To run the example project; clone the repo, and run `pod install` from the Project directory first. + +## Requirements + +- Xcode 5 +- OS X 10.9 (Mavericks) + + +## Installation + +PSMTabBarControl is not yet available through [CocoaPods](http://cocoapods.org). + +To install add the following line to your Podfile: + + pod 'PSMTabBarControl', :git => 'https://github.com/neoneye/PSMTabBarControl.git' + +## Author + +Simon Strandgaard, simon@opcoders.com + +## License + +PSMTabBarControl is available under the BSD license. See the LICENSE file for more info. + diff --git a/Rakefile b/Rakefile new file mode 100644 index 0000000..2a2fb5f --- /dev/null +++ b/Rakefile @@ -0,0 +1,148 @@ +desc "Runs the specs [EMPTY]" +task :spec do + # Provide your own implementation +end + +task :version do + git_remotes = `git remote`.strip.split("\n") + + if git_remotes.count > 0 + puts "-- fetching version number from github" + sh 'git fetch' + + remote_version = remote_spec_version + end + + if remote_version.nil? + puts "There is no current released version. You're about to release a new Pod." + version = "0.0.1" + else + puts "The current released version of your pod is " + remote_spec_version.to_s() + version = suggested_version_number + end + + puts "Enter the version you want to release (" + version + ") " + new_version_number = $stdin.gets.strip + if new_version_number == "" + new_version_number = version + end + + replace_version_number(new_version_number) +end + +desc "Release a new version of the Pod" +task :release do + + puts "* Running version" + sh "rake version" + + unless ENV['SKIP_CHECKS'] + if `git symbolic-ref HEAD 2>/dev/null`.strip.split('/').last != 'master' + $stderr.puts "[!] You need to be on the `master' branch in order to be able to do a release." + exit 1 + end + + if `git tag`.strip.split("\n").include?(spec_version) + $stderr.puts "[!] A tag for version `#{spec_version}' already exists. Change the version in the podspec" + exit 1 + end + + puts "You are about to release `#{spec_version}`, is that correct? [y/n]" + exit if $stdin.gets.strip.downcase != 'y' + end + + puts "* Running specs" + sh "rake spec" + + puts "* Linting the podspec" + sh "pod lib lint" + + # Then release + sh "git commit #{podspec_path} CHANGELOG.md -m 'Release #{spec_version}'" + sh "git tag -a #{spec_version} -m 'Release #{spec_version}'" + sh "git push origin master" + sh "git push origin --tags" + sh "pod push master #{podspec_path}" +end + +# @return [Pod::Version] The version as reported by the Podspec. +# +def spec_version + require 'cocoapods' + spec = Pod::Specification.from_file(podspec_path) + spec.version +end + +# @return [Pod::Version] The version as reported by the Podspec from remote. +# +def remote_spec_version + require 'cocoapods-core' + + if spec_file_exist_on_remote? + remote_spec = eval(`git show origin/master:#{podspec_path}`) + remote_spec.version + else + nil + end +end + +# @return [Bool] If the remote repository has a copy of the podpesc file or not. +# +def spec_file_exist_on_remote? + test_condition = `if git rev-parse --verify --quiet origin/master:#{podspec_path} >/dev/null; + then + echo 'true' + else + echo 'false' + fi` + + 'true' == test_condition.strip +end + +# @return [String] The relative path of the Podspec. +# +def podspec_path + podspecs = Dir.glob('*.podspec') + if podspecs.count == 1 + podspecs.first + else + raise "Could not select a podspec" + end +end + +# @return [String] The suggested version number based on the local and remote version numbers. +# +def suggested_version_number + if spec_version != remote_spec_version + spec_version.to_s() + else + next_version(spec_version).to_s() + end +end + +# @param [Pod::Version] version +# the version for which you need the next version +# +# @note It is computed by bumping the last component of the versino string by 1. +# +# @return [Pod::Version] The version that comes next after the version supplied. +# +def next_version(version) + version_components = version.to_s().split("."); + last = (version_components.last.to_i() + 1).to_s + version_components[-1] = last + Pod::Version.new(version_components.join(".")) +end + +# @param [String] new_version_number +# the new version number +# +# @note This methods replaces the version number in the podspec file with a new version number. +# +# @return void +# +def replace_version_number(new_version_number) + text = File.read(podspec_path) + text.gsub!(/(s.version( )*= ")#{spec_version}(")/, "\\1#{new_version_number}\\3") + File.open(podspec_path, "w") { |file| file.puts text } +end \ No newline at end of file diff --git a/Resources/DemoWindow.xib b/Resources/DemoWindow.xib deleted file mode 100644 index 60a8312..0000000 --- a/Resources/DemoWindow.xib +++ /dev/null @@ -1,2642 +0,0 @@ - - - - 1070 - 11E53 - 2549 - 1138.47 - 569.00 - - com.apple.InterfaceBuilder.CocoaPlugin - 2549 - - - NSBox - NSButton - NSButtonCell - NSCustomObject - NSCustomView - NSDrawer - NSMenu - NSMenuItem - NSPopUpButton - NSPopUpButtonCell - NSTabView - NSTabViewItem - NSTextField - NSTextFieldCell - NSView - NSWindowTemplate - - - com.apple.InterfaceBuilder.CocoaPlugin - - - PluginDependencyRecalculationVersion - - - - - DemoWindowController - - - FirstResponder - - - NSApplication - - - 15 - 2 - {{111, 69}, {477, 504}} - 813170688 - Window - - NSWindow - - - View - - - {213, 107} - - - 256 - - - - 274 - {{13, 83}, {454, 397}} - - - - - - 1 - - - - 256 - {{10, 33}, {434, 351}} - - - Tab - - 6 - System - controlColor - - 3 - MC42NjY2NjY2NjY3AA - - - - - - - - LucidaGrande - 13 - 1044 - - 0 - YES - YES - - - - - - - 290 - {{20, 20}, {437, 65}} - - YES - - 67108864 - 272629760 - Observe the changes in the reference NSTabView above in response to adding (New Tab from the File menu), rearranging (drag tabs above), removing (close button on above tabs), selecting (click a tab above), and stopping progress (stop button in toolbar). You can also resize the window, and create an overflow of tabs to view the overflow menu. - - LucidaGrande - 10 - 2843 - - - - - 6 - System - controlTextColor - - 3 - MAA - - - - - - - 266 - {{0, 482}, {477, 22}} - - - PSMTabBarControl - - - {477, 504} - - - - {{0, 0}, {1280, 1002}} - {213, 129} - {10000000000000, 10000000000000} - YES - - - - {205, 472} - {50, 50} - {600, 500} - 0 - 0.0 - 15 - - - - - - 256 - - - - 256 - {461, 22} - - YES - - -1804599231 - 268436480 - - - - YES - - 6 - System - textBackgroundColor - - 3 - MQA - - - - 6 - System - textColor - - - - - - {461, 22} - - - - NSView - - NSResponder - - - - 258 - - - - 266 - - - - 274 - - - - 256 - {{16, 330}, {30, 13}} - - - - YES - - 67108864 - 272629760 - Style: - - - - - - - - - 258 - {{51, 325}, {106, 22}} - - - - YES - - -2076049856 - 133120 - - LucidaGrande - 11 - 3100 - - - 109199360 - 1 - - - - - - 400 - 75 - - - Card - - 2147483647 - 1 - - NSImage - NSMenuCheckmark - - - NSImage - NSMenuMixedState - - _popUpItemAction: - - - YES - - - OtherViews - - - - - Metal - - 1048576 - 2147483647 - - - _popUpItemAction: - - - - - Aqua - - 1048576 - 2147483647 - - - _popUpItemAction: - - - - - Unified - - 1048576 - 2147483647 - - - _popUpItemAction: - - - - - Adium - - 1048576 - 2147483647 - - - _popUpItemAction: - - - - - LiveChat - - 2147483647 - - - _popUpItemAction: - - - - - - 5 - 3 - YES - YES - 1 - - - - - 258 - {{13, 265}, {143, 18}} - - - - YES - - 67108864 - 131072 - Can close only tab - - - 1211912448 - 2 - - NSImage - NSSwitch - - - NSSwitch - - - - 200 - 25 - - - - - 258 - {{13, 225}, {121, 18}} - - - - YES - - 67108864 - 131072 - Hide for single tab - - - 1211912448 - 2 - - - - - 200 - 25 - - - - - 258 - {{13, 205}, {138, 18}} - - - - YES - - 67108864 - 131072 - Show Add Tab button - - - 1211912448 - 2 - - - - - 200 - 25 - - - - - 258 - - - - 274 - - - - 256 - {{44, 88}, {25, 13}} - - - - YES - - 67108864 - 272629760 - Min: - - - - - - - - - 256 - {{41, 67}, {28, 13}} - - - - YES - - 67108864 - 272629760 - Max: - - - - - - - - - 256 - {{16, 46}, {53, 13}} - - - - YES - - 67108864 - 272629760 - Optimum: - - - - - - - - - 256 - {{77, 86}, {43, 19}} - - - - YES - - -1804599231 - 272761856 - 100 - - - YES - - - - - - - 256 - {{77, 65}, {43, 19}} - - - - YES - - -1804599231 - 272761856 - 280 - - - YES - - - - - - - 256 - {{77, 44}, {43, 19}} - - - - YES - - -1804599231 - 272761856 - 130 - - - YES - - - - - - - 258 - {{12, 29}, {116, 5}} - - - - {0, 0} - - 67108864 - 0 - Box - - - - 3 - MCAwLjgwMDAwMDAxMTkAA - - - 3 - 2 - 0 - NO - - - - 256 - {{33, 9}, {73, 16}} - - - - YES - - 67108864 - 131072 - Size to fit - - - 1211912448 - 2 - - - - - 200 - 25 - - - - {{2, 2}, {140, 115}} - - - - - - {{13, 7}, {144, 132}} - - - - {0, 0} - - 67108864 - 0 - Tab Width - - - - 3 - MCAwLjgwMDAwMDAxMTkAA - - - - 3 - 0 - 2 - NO - - - - 258 - {{13, 185}, {124, 18}} - - - - YES - - -2080374784 - 131072 - Use overflow menu - - - 1211912448 - 2 - - - - 200 - 25 - - - - - 258 - {{13, 245}, {143, 18}} - - - - YES - - 67108864 - 131072 - Disable tab closing - - - 1211912448 - 2 - - - - - 200 - 25 - - - - - 256 - {{16, 309}, {62, 13}} - - - - YES - - 67108864 - 272629760 - Orientation: - - - - - - - - - 258 - {{83, 304}, {74, 22}} - - - - YES - - -2076049856 - 133120 - - - 109199360 - 1 - - - - - - 400 - 75 - - - Horizontal - - 1048576 - 2147483647 - 1 - - - _popUpItemAction: - - - YES - - - OtherViews - - - - - - Vertical - - 1048576 - 2147483647 - - - _popUpItemAction: - - - - - 3 - YES - YES - 1 - - - - - 258 - {{13, 165}, {147, 18}} - - - - YES - - 67108864 - 131072 - Automatically animates - - - 1211912448 - 2 - - - - 200 - 25 - - - - - 258 - {{13, 145}, {147, 18}} - - - - YES - - 67108864 - 131072 - Allow tab scrubbing - - - 1211912448 - 2 - - - - 200 - 25 - - - - - 256 - {{16, 288}, {50, 13}} - - - - YES - - 67108864 - 272629760 - Tear-Off: - - - - - - - - - 258 - {{71, 283}, {86, 22}} - - - - YES - - -2076049856 - 133120 - - - 109199360 - 1 - - - - - - 400 - 75 - - - Alpha Window - - 1048576 - 2147483647 - 1 - - - _popUpItemAction: - - - YES - - - OtherViews - - - - - - Miniwindow - - 1048576 - 2147483647 - - - _popUpItemAction: - - - - - 3 - YES - YES - 1 - - - - {{2, 2}, {174, 360}} - - - - - - {{15, 165}, {178, 377}} - - - - {0, 0} - - 67108864 - 0 - Control Options - - - - 3 - MCAwLjgwMDAwMDAxMTkAA - - - - 3 - 0 - 2 - NO - - - - 266 - - - - 274 - - - - 256 - {{16, 101}, {28, 13}} - - - - YES - - 67108864 - 272629760 - Icon: - - - - - - - - - 260 - {{16, 75}, {47, 13}} - - - - YES - - 67108864 - 272629760 - Counter: - - - - - - - - - 260 - {{13, 51}, {80, 18}} - - - - YES - - 67108864 - 131072 - Processing - - - 1211912448 - 2 - - - - 200 - 25 - - - - - 258 - {{45, 96}, {108, 22}} - - - - YES - - -2076049856 - 133120 - - - 109199360 - 1 - - - - - - 400 - 75 - - - NSFolderSmart - - 1048576 - 2147483647 - 1 - - - _popUpItemAction: - - - YES - - - OtherViews - - - - - None - - 1048576 - 2147483647 - - - _popUpItemAction: - - - - - NSComputer - - 1048576 - 2147483647 - - - _popUpItemAction: - - - - - NSNetwork - - 1048576 - 2147483647 - - - _popUpItemAction: - - - - - NSUser - - 1048576 - 2147483647 - - - _popUpItemAction: - - - - - - 4 - 3 - YES - YES - 1 - - - - - 260 - {{71, 73}, {50, 19}} - - - - YES - - -1804599231 - 272761856 - - - - YES - - - - - - - 260 - {{13, 31}, {80, 18}} - - - - YES - - 67108864 - 131072 - Edited - - - 1211912448 - 2 - - - - 200 - 25 - - - - - 260 - {{13, 11}, {88, 18}} - - - YES - - 67108864 - 131072 - Large Image - - - 1211912448 - 2 - - - - 200 - 25 - - - - {{2, 2}, {172, 128}} - - - - - - {{17, 16}, {176, 145}} - - - - {0, 0} - - 67108864 - 0 - Tab-specific Values - - - - 3 - MCAwLjgwMDAwMDAxMTkAA - - - - 3 - 0 - 2 - NO - - - {204, 552} - - - - - NSView - - NSResponder - - - - 256 - {125, 1} - - - - - - - - button_allowScrubbing - - - - 95 - - - - button_automaticallyAnimate - - - - 96 - - - - button_canCloseOnlyTab - - - - 97 - - - - button_disableTabClosing - - - - 98 - - - - button_hideForSingleTab - - - - 99 - - - - button_showAddTab - - - - 100 - - - - button_sizeToFit - - - - 101 - - - - button_useOverflow - - - - 102 - - - - drawer - - - - 103 - - - - iconButton - - - - 104 - - - - isEditedButton - - - - 105 - - - - isProcessingButton - - - - 106 - - - - objectCounterField - - - - 107 - - - - popUp_orientation - - - - 108 - - - - popUp_style - - - - 109 - - - - popUp_tearOff - - - - 110 - - - - tabView - - - - 112 - - - - textField_maxWidth - - - - 113 - - - - textField_minWidth - - - - 114 - - - - textField_optimumWidth - - - - 115 - - - - window - - - - 116 - - - - tabField - - - - 117 - - - - setTabLabel: - - - - 118 - - - - isProcessingAction: - - - - 119 - - - - setIconNamed: - - - - 120 - - - - setObjectCount: - - - - 121 - - - - isEditedAction: - - - - 122 - - - - configStyle: - - - - 123 - - - - configOrientation: - - - - 124 - - - - configCanCloseOnlyTab: - - - - 126 - - - - configDisableTabClose: - - - - 127 - - - - configHideForSingleTab: - - - - 128 - - - - configAddTabButton: - - - - 129 - - - - configUseOverflowMenu: - - - - 130 - - - - configAutomaticallyAnimates: - - - - 131 - - - - configAllowsScrubbing: - - - - 132 - - - - configTabMinWidth: - - - - 133 - - - - configTabMaxWidth: - - - - 134 - - - - configTabOptimumWidth: - - - - 135 - - - - configTabSizeToFit: - - - - 136 - - - - tabBar - - - - 199 - - - - hasLargeImageAction: - - - - 204 - - - - hasLargeImageButton - - - - 205 - - - - configTearOffStyle: - - - - 207 - - - - parentWindow - - - - 90 - - - - contentView - - - - 93 - - - - delegate - - - - 198 - - - - delegate - - - - 195 - - - - partnerView - - - - 196 - - - - tabView - - - - 197 - - - - - - 0 - - - - - - -2 - - - File's Owner - - - -1 - - - First Responder - - - -3 - - - Application - - - 3 - - - - - - Window - - - 4 - - - Config Drawer - - - 5 - - - - - - Toolbar Views - - - 6 - - - - - - - Drawer Options - - - 7 - - - - - - - - - - - - - - 8 - - - - - - - - - - - - - - - - - - - - - 9 - - - - - - - - 10 - - - - - - - - 11 - - - - - - - - 12 - - - - - - - - 13 - - - - - - - - 14 - - - - - - - - 15 - - - - - - - - 16 - - - - - - - - 17 - - - - - - - - - - - - - - - 18 - - - - - - - - 19 - - - - - - - - 20 - - - - - - - - 21 - - - - - - - - 22 - - - - - - - - 23 - - - - - 24 - - - - - - - - 25 - - - - - - - - - - - - - 26 - - - - - 27 - - - - - 28 - - - - - 29 - - - - - 30 - - - - - 31 - - - - - 32 - - - - - 33 - - - - - - - - 34 - - - - - - 35 - - - - - - - - 36 - - - - - - - - 37 - - - - - - - - 38 - - - - - - - - 39 - - - - - - - - 40 - - - - - - - - 41 - - - - - 42 - - - - - 43 - - - - - 44 - - - - - 45 - - - - - 46 - - - - - 48 - - - - - 49 - - - - - 50 - - - - - 51 - - - - - 52 - - - - - - - - 53 - - - - - - - - - 55 - - - - - 56 - - - - - 57 - - - - - 58 - - - - - 59 - - - - - - - - 60 - - - - - - - - - 61 - - - - - 62 - - - - - 63 - - - - - - - - 64 - - - - - - - - 65 - - - - - - - - 66 - - - - - - - - 67 - - - - - - - - 68 - - - - - - - - 69 - - - - - 70 - - - - - 71 - - - - - 72 - - - - - - - - 73 - - - - - - - - - - - - 74 - - - - - 75 - - - - - 76 - - - - - 77 - - - - - 78 - - - - - 79 - - - - - 80 - - - - - 81 - - - - - - - - 82 - - - - - 83 - - - - - - - - - - 84 - - - - - - - - 89 - - - - - 85 - - - - - - - - 87 - - - - - - - - 88 - - - - - 194 - - - - - 54 - - - - - 47 - - - - - 200 - - - - - 201 - - - - - - - - 202 - - - - - 206 - - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{441, 51}, {477, 504}} - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - - 207 - - - - - DemoWindowController - NSWindowController - - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - - - - addNewTab: - id - - - closeTab: - id - - - configAddTabButton: - id - - - configAllowsScrubbing: - id - - - configAutomaticallyAnimates: - id - - - configCanCloseOnlyTab: - id - - - configDisableTabClose: - id - - - configHideForSingleTab: - id - - - configOrientation: - id - - - configStyle: - id - - - configTabMaxWidth: - id - - - configTabMinWidth: - id - - - configTabOptimumWidth: - id - - - configTabSizeToFit: - id - - - configTearOffStyle: - id - - - configUseOverflowMenu: - id - - - hasLargeImageAction: - id - - - isEditedAction: - id - - - isProcessingAction: - id - - - setIconNamed: - id - - - setObjectCount: - id - - - setTabLabel: - id - - - stopProcessing: - id - - - toggleToolbar: - id - - - - NSButton - NSButton - NSButton - NSButton - NSButton - NSButton - NSButton - NSButton - NSDrawer - NSButton - NSPopUpButton - NSButton - NSButton - NSTextField - NSPopUpButton - NSPopUpButton - NSPopUpButton - PSMTabBarControl - NSTextField - NSTabView - NSTextField - NSTextField - NSTextField - - - - button_allowScrubbing - NSButton - - - button_automaticallyAnimate - NSButton - - - button_canCloseOnlyTab - NSButton - - - button_disableTabClosing - NSButton - - - button_hideForSingleTab - NSButton - - - button_showAddTab - NSButton - - - button_sizeToFit - NSButton - - - button_useOverflow - NSButton - - - drawer - NSDrawer - - - hasLargeImageButton - NSButton - - - iconButton - NSPopUpButton - - - isEditedButton - NSButton - - - isProcessingButton - NSButton - - - objectCounterField - NSTextField - - - popUp_orientation - NSPopUpButton - - - popUp_style - NSPopUpButton - - - popUp_tearOff - NSPopUpButton - - - tabBar - PSMTabBarControl - - - tabField - NSTextField - - - tabView - NSTabView - - - textField_maxWidth - NSTextField - - - textField_minWidth - NSTextField - - - textField_optimumWidth - NSTextField - - - - IBProjectSource - ./Classes/DemoWindowController.h - - - - PSMTabBarControl - NSControl - - id - id - NSTabView - - - - delegate - id - - - partnerView - id - - - tabView - NSTabView - - - - IBProjectSource - ./Classes/PSMTabBarControl.h - - - - - 0 - IBCocoaFramework - - com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 - - - YES - 3 - - {11, 11} - {10, 3} - {15, 15} - - - diff --git a/Resources/PSMTabBarControlDemo.xib b/Resources/PSMTabBarControlDemo.xib deleted file mode 100644 index 23b9023..0000000 --- a/Resources/PSMTabBarControlDemo.xib +++ /dev/null @@ -1,1618 +0,0 @@ - - - - 1060 - 10D567 - 785 - 1038.29 - 460.00 - - com.apple.InterfaceBuilder.CocoaPlugin - 785 - - - YES - - - - YES - com.apple.InterfaceBuilder.CocoaPlugin - - - YES - - YES - - - YES - - - - YES - - NSApplication - - - FirstResponder - - - NSApplication - - - NSFontManager - - - Main Menu - - YES - - - PSMTabBarControlDemo - - 2147483647 - - NSImage - NSMenuCheckmark - - - NSImage - NSMenuMixedState - - submenuAction: - - New Application - - YES - - - Hide New Application - h - 1048576 - 2147483647 - - - - - - Hide Others - h - 1572864 - 2147483647 - - - - - - Show All - - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Quit New Application - q - 1048576 - 2147483647 - - - - - _NSAppleMenu - - - - - File - - 2147483647 - - - submenuAction: - - File - - YES - - - New Window - n - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - New Tab - t - 1048576 - 2147483647 - - - - - - Close Tab - w - 1048576 - 2147483647 - - - - - - - - - Window - - 2147483647 - - - submenuAction: - - Window - - YES - - - Minimize - m - 1048576 - 2147483647 - - - - - - Zoom - - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Bring All to Front - - 2147483647 - - - - - _NSWindowsMenu - - - - _NSMainMenu - - - DemoAppController - - - - - YES - - - performMiniaturize: - - - - 37 - - - - arrangeInFront: - - - - 39 - - - - performZoom: - - - - 240 - - - - hide: - - - - 369 - - - - hideOtherApplications: - - - - 370 - - - - unhideAllApplications: - - - - 372 - - - - terminate: - - - - 448 - - - - delegate - - - - 812 - - - - addNewTab: - - - - 817 - - - - closeTab: - - - - 818 - - - - newWindow: - - - - 819 - - - - - YES - - 0 - - - - - - -2 - - - File's Owner - - - -1 - - - First Responder - - - -3 - - - Application - - - 29 - - - YES - - - - - - - - 19 - - - YES - - - - - - 56 - - - YES - - - - - - 83 - - - YES - - - - - - 81 - - - YES - - - - - - - - - 57 - - - YES - - - - - - - - - - 134 - - - - - 150 - - - - - 136 - - - - - 149 - - - - - 145 - - - - - 24 - - - YES - - - - - - - - - 92 - - - - - 5 - - - - - 239 - - - - - 23 - - - - - 373 - - - - - 811 - - - - - 813 - - - - - 814 - - - - - 815 - - - - - 816 - - - - - - - YES - - YES - -3.IBPluginDependency - 134.IBPluginDependency - 134.ImportedFromIB2 - 136.IBPluginDependency - 136.ImportedFromIB2 - 145.IBPluginDependency - 145.ImportedFromIB2 - 149.IBPluginDependency - 149.ImportedFromIB2 - 150.IBPluginDependency - 150.ImportedFromIB2 - 19.IBPluginDependency - 19.ImportedFromIB2 - 23.IBPluginDependency - 23.ImportedFromIB2 - 239.IBPluginDependency - 239.ImportedFromIB2 - 24.IBEditorWindowLastContentRect - 24.IBPluginDependency - 24.ImportedFromIB2 - 24.editorWindowContentRectSynchronizationRect - 29.IBEditorWindowLastContentRect - 29.IBPluginDependency - 29.ImportedFromIB2 - 29.WindowOrigin - 29.editorWindowContentRectSynchronizationRect - 5.IBPluginDependency - 5.ImportedFromIB2 - 56.IBPluginDependency - 56.ImportedFromIB2 - 57.IBEditorWindowLastContentRect - 57.IBPluginDependency - 57.ImportedFromIB2 - 57.editorWindowContentRectSynchronizationRect - 81.IBEditorWindowLastContentRect - 81.IBPluginDependency - 81.ImportedFromIB2 - 81.editorWindowContentRectSynchronizationRect - 811.IBPluginDependency - 813.ImportedFromIB2 - 814.ImportedFromIB2 - 815.ImportedFromIB2 - 816.ImportedFromIB2 - 83.IBPluginDependency - 83.ImportedFromIB2 - 92.IBPluginDependency - 92.ImportedFromIB2 - - - YES - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - {{452, 579}, {197, 73}} - com.apple.InterfaceBuilder.CocoaPlugin - - {{525, 802}, {197, 73}} - {{262, 937}, {331, 20}} - com.apple.InterfaceBuilder.CocoaPlugin - - {74, 862} - {{11, 977}, {478, 20}} - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - {{334, 469}, {246, 183}} - com.apple.InterfaceBuilder.CocoaPlugin - - {{23, 794}, {245, 183}} - {{468, 864}, {164, 73}} - com.apple.InterfaceBuilder.CocoaPlugin - - {{323, 672}, {199, 203}} - com.apple.InterfaceBuilder.CocoaPlugin - - - - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - - - - YES - - - YES - - - - - YES - - - YES - - - - 819 - - - - YES - - DemoAppController - NSObject - - newWindow: - id - - - newWindow: - - newWindow: - id - - - - IBProjectSource - DemoAppController.h - - - - FirstResponder - - YES - - YES - addNewTab: - closeTab: - - - YES - id - id - - - - YES - - YES - addNewTab: - closeTab: - - - YES - - addNewTab: - id - - - closeTab: - id - - - - - IBUserSource - - - - - NSApplication - - IBProjectSource - PSMTabDragAssistant.h - - - - NSObject - - IBProjectSource - PSMTabBarCell.h - - - - NSObject - - IBProjectSource - PSMTabBarControl.h - - - - PSMTabBarControl - - IBProjectSource - PSMProgressIndicator.h - - - - PSMTabBarControl - - - - PSMTabBarControl - NSControl - - YES - - YES - delegate - partnerView - style - tabView - - - YES - id - id - id - NSTabView - - - - YES - - YES - delegate - partnerView - style - tabView - - - YES - - delegate - id - - - partnerView - id - - - style - id - - - tabView - NSTabView - - - - - - - PSMTabBarControl - - - - PSMTabBarControl - - IBProjectSource - PSMTabStyle.h - - - - WindowController - NSWindowController - - YES - - YES - addNewTab: - closeTab: - configAddTabButton: - configAllowsScrubbing: - configAutomaticallyAnimates: - configCanCloseOnlyTab: - configDisableTabClose: - configHideForSingleTab: - configOrientation: - configStyle: - configTabMaxWidth: - configTabMinWidth: - configTabOptimumWidth: - configTabSizeToFit: - configTearOffStyle: - configUseOverflowMenu: - isEditedAction: - isProcessingAction: - setIconNamed: - setObjectCount: - setTabLabel: - stopProcessing: - toggleToolbar: - - - YES - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - - - - YES - - YES - addNewTab: - closeTab: - configAddTabButton: - configAllowsScrubbing: - configAutomaticallyAnimates: - configCanCloseOnlyTab: - configDisableTabClose: - configHideForSingleTab: - configOrientation: - configStyle: - configTabMaxWidth: - configTabMinWidth: - configTabOptimumWidth: - configTabSizeToFit: - configTearOffStyle: - configUseOverflowMenu: - isEditedAction: - isProcessingAction: - setIconNamed: - setObjectCount: - setTabLabel: - stopProcessing: - toggleToolbar: - - - YES - - addNewTab: - id - - - closeTab: - id - - - configAddTabButton: - id - - - configAllowsScrubbing: - id - - - configAutomaticallyAnimates: - id - - - configCanCloseOnlyTab: - id - - - configDisableTabClose: - id - - - configHideForSingleTab: - id - - - configOrientation: - id - - - configStyle: - id - - - configTabMaxWidth: - id - - - configTabMinWidth: - id - - - configTabOptimumWidth: - id - - - configTabSizeToFit: - id - - - configTearOffStyle: - id - - - configUseOverflowMenu: - id - - - isEditedAction: - id - - - isProcessingAction: - id - - - setIconNamed: - id - - - setObjectCount: - id - - - setTabLabel: - id - - - stopProcessing: - id - - - toggleToolbar: - id - - - - - YES - - YES - button_allowScrubbing - button_automaticallyAnimate - button_canCloseOnlyTab - button_disableTabClosing - button_hideForSingleTab - button_showAddTab - button_sizeToFit - button_useOverflow - drawer - iconButton - isEditedButton - isProcessingButton - objectCounterField - popUp_orientation - popUp_style - popUp_tearOff - tabBar - tabField - tabView - textField_maxWidth - textField_minWidth - textField_optimumWidth - - - YES - NSButton - NSButton - NSButton - NSButton - NSButton - NSButton - NSButton - NSButton - NSDrawer - NSPopUpButton - NSButton - NSButton - NSTextField - NSPopUpButton - NSPopUpButton - NSPopUpButton - PSMTabBarControl - NSTextField - NSTabView - NSTextField - NSTextField - NSTextField - - - - YES - - YES - button_allowScrubbing - button_automaticallyAnimate - button_canCloseOnlyTab - button_disableTabClosing - button_hideForSingleTab - button_showAddTab - button_sizeToFit - button_useOverflow - drawer - iconButton - isEditedButton - isProcessingButton - objectCounterField - popUp_orientation - popUp_style - popUp_tearOff - tabBar - tabField - tabView - textField_maxWidth - textField_minWidth - textField_optimumWidth - - - YES - - button_allowScrubbing - NSButton - - - button_automaticallyAnimate - NSButton - - - button_canCloseOnlyTab - NSButton - - - button_disableTabClosing - NSButton - - - button_hideForSingleTab - NSButton - - - button_showAddTab - NSButton - - - button_sizeToFit - NSButton - - - button_useOverflow - NSButton - - - drawer - NSDrawer - - - iconButton - NSPopUpButton - - - isEditedButton - NSButton - - - isProcessingButton - NSButton - - - objectCounterField - NSTextField - - - popUp_orientation - NSPopUpButton - - - popUp_style - NSPopUpButton - - - popUp_tearOff - NSPopUpButton - - - tabBar - PSMTabBarControl - - - tabField - NSTextField - - - tabView - NSTabView - - - textField_maxWidth - NSTextField - - - textField_minWidth - NSTextField - - - textField_optimumWidth - NSTextField - - - - - IBProjectSource - DemoWindowController.h - - - - - YES - - NSApplication - NSResponder - - IBFrameworkSource - AppKit.framework/Headers/NSApplication.h - - - - NSApplication - - IBFrameworkSource - AppKit.framework/Headers/NSApplicationScripting.h - - - - NSApplication - - IBFrameworkSource - AppKit.framework/Headers/NSColorPanel.h - - - - NSApplication - - IBFrameworkSource - AppKit.framework/Headers/NSHelpManager.h - - - - NSApplication - - IBFrameworkSource - AppKit.framework/Headers/NSPageLayout.h - - - - NSApplication - - IBFrameworkSource - AppKit.framework/Headers/NSUserInterfaceItemSearching.h - - - - NSButton - NSControl - - IBFrameworkSource - AppKit.framework/Headers/NSButton.h - - - - NSControl - NSView - - IBFrameworkSource - AppKit.framework/Headers/NSControl.h - - - - NSDrawer - NSResponder - - IBFrameworkSource - AppKit.framework/Headers/NSDrawer.h - - - - NSFontManager - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSFontManager.h - - - - NSFormatter - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSFormatter.h - - - - NSMenu - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSMenu.h - - - - NSMenuItem - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSMenuItem.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSAccessibility.h - - - - NSObject - - - - NSObject - - - - NSObject - - - - NSObject - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSDictionaryController.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSDragging.h - - - - NSObject - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSFontPanel.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSKeyValueBinding.h - - - - NSObject - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSNibLoading.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSOutlineView.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSPasteboard.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSSavePanel.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSTableView.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSToolbarItem.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSView.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSArchiver.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSClassDescription.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSError.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSFileManager.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSKeyValueCoding.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSKeyValueObserving.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSKeyedArchiver.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSObject.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSObjectScripting.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSPortCoder.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSRunLoop.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSScriptClassDescription.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSScriptKeyValueCoding.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSScriptObjectSpecifiers.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSScriptWhoseTests.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSThread.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSURL.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSURLConnection.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSURLDownload.h - - - - NSObject - - IBFrameworkSource - InterfaceBuilderKit.framework/Headers/IBObjectIntegration.h - - - - NSPopUpButton - NSButton - - IBFrameworkSource - AppKit.framework/Headers/NSPopUpButton.h - - - - NSResponder - - IBFrameworkSource - AppKit.framework/Headers/NSInterfaceStyle.h - - - - NSResponder - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSResponder.h - - - - NSTabView - NSView - - IBFrameworkSource - AppKit.framework/Headers/NSTabView.h - - - - NSTextField - NSControl - - IBFrameworkSource - AppKit.framework/Headers/NSTextField.h - - - - NSView - - IBFrameworkSource - AppKit.framework/Headers/NSClipView.h - - - - NSView - - - - NSView - - IBFrameworkSource - AppKit.framework/Headers/NSRulerView.h - - - - NSView - NSResponder - - - - NSView - - IBFrameworkSource - InterfaceBuilderKit.framework/Headers/IBViewIntegration.h - - - - NSWindow - - - - NSWindow - NSResponder - - IBFrameworkSource - AppKit.framework/Headers/NSWindow.h - - - - NSWindow - - IBFrameworkSource - AppKit.framework/Headers/NSWindowScripting.h - - - - NSWindowController - NSResponder - - showWindow: - id - - - showWindow: - - showWindow: - id - - - - IBFrameworkSource - AppKit.framework/Headers/NSWindowController.h - - - - - 0 - IBCocoaFramework - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - - - com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 - - - YES - PSMTabBarControl.xcodeproj - 3 - - YES - - YES - NSMenuCheckmark - NSMenuMixedState - - - YES - {9, 8} - {7, 2} - - - - diff --git a/build.sh b/build.sh deleted file mode 100755 index 87919ff..0000000 --- a/build.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash -xcodebuild build -configuration Release -target PSMTabBarControlFramework SYMROOT=build OBJROOT=build - diff --git a/xcconfigs/Base.xcconfig b/xcconfigs/Base.xcconfig deleted file mode 100644 index 0f5ac13..0000000 --- a/xcconfigs/Base.xcconfig +++ /dev/null @@ -1,13 +0,0 @@ -ARCHS = $(ARCHS_STANDARD_32_64_BIT) -GCC_WARN_ABOUT_RETURN_TYPE = YES -GCC_C_LANGUAGE_STANDARD = gnu99 -GCC_WARN_UNUSED_VARIABLE = YES -MACOSX_DEPLOYMENT_TARGET = 10.6 -SDKROOT = macosx -COMBINE_HIDPI_IMAGES = NO -WARNING_CFLAGS = -Wmost -Wno-four-char-constants -Wno-unknown-pragmas -GCC_VERSION = com.apple.compilers.llvm.clang.1_0 -GCC_PREFIX_HEADER = $(SYSTEM_LIBRARY_DIR)/Frameworks/AppKit.framework/Headers/AppKit.h -GCC_PRECOMPILE_PREFIX_HEADER = YES -CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES - diff --git a/xcconfigs/Debug.xcconfig b/xcconfigs/Debug.xcconfig deleted file mode 100644 index 5a07028..0000000 --- a/xcconfigs/Debug.xcconfig +++ /dev/null @@ -1,6 +0,0 @@ -#include "Base.xcconfig" -ONLY_ACTIVE_ARCH = YES -COPY_PHASE_STRIP = NO -GCC_OPTIMIZATION_LEVEL = 0 -GCC_DYNAMIC_NO_PIC = NO -GCC_MODEL_TUNING = G5 diff --git a/xcconfigs/PSMTabBarControlDemo-Base.xcconfig b/xcconfigs/PSMTabBarControlDemo-Base.xcconfig deleted file mode 100644 index ee17ecc..0000000 --- a/xcconfigs/PSMTabBarControlDemo-Base.xcconfig +++ /dev/null @@ -1,6 +0,0 @@ -#include "Base.xcconfig" -OTHER_LDFLAGS = -framework Foundation -framework AppKit -PRODUCT_NAME = PSMTabBarControlDemo -INSTALL_PATH = $(HOME)/Applications -INFOPLIST_FILE = Source/PSMTabBarControlDemo-Info.plist -ALWAYS_SEARCH_USER_PATHS = NO diff --git a/xcconfigs/PSMTabBarControlDemo-Debug.xcconfig b/xcconfigs/PSMTabBarControlDemo-Debug.xcconfig deleted file mode 100644 index f28d674..0000000 --- a/xcconfigs/PSMTabBarControlDemo-Debug.xcconfig +++ /dev/null @@ -1,2 +0,0 @@ -#include "Debug.xcconfig" -#include "PSMTabBarControlDemo-Base.xcconfig" diff --git a/xcconfigs/PSMTabBarControlDemo-Release.xcconfig b/xcconfigs/PSMTabBarControlDemo-Release.xcconfig deleted file mode 100644 index e0d0423..0000000 --- a/xcconfigs/PSMTabBarControlDemo-Release.xcconfig +++ /dev/null @@ -1,5 +0,0 @@ -#include "Release.xcconfig" -#include "PSMTabBarControlDemo-Base.xcconfig" - -COPY_PHASE_STRIP = YES -ZERO_LINK = NO diff --git a/xcconfigs/PSMTabBarControlFramework-Base.xcconfig b/xcconfigs/PSMTabBarControlFramework-Base.xcconfig deleted file mode 100644 index dd0a2a0..0000000 --- a/xcconfigs/PSMTabBarControlFramework-Base.xcconfig +++ /dev/null @@ -1,9 +0,0 @@ -#include "Base.xcconfig" -PRODUCT_NAME = PSMTabBarControl -DYLIB_CURRENT_VERSION = 1 -SKIP_INSTALL = NO -GCC_ENABLE_OBJC_GC = unsupported -FRAMEWORK_VERSION = A -INSTALL_PATH = @rpath -INFOPLIST_FILE = Source/PSMTabBarControl-Info.plist -DYLIB_COMPATIBILITY_VERSION = 1 diff --git a/xcconfigs/PSMTabBarControlFramework-Debug.xcconfig b/xcconfigs/PSMTabBarControlFramework-Debug.xcconfig deleted file mode 100644 index 398d52d..0000000 --- a/xcconfigs/PSMTabBarControlFramework-Debug.xcconfig +++ /dev/null @@ -1,2 +0,0 @@ -#include "Debug.xcconfig" -#include "PSMTabBarControlFramework-Base.xcconfig" diff --git a/xcconfigs/PSMTabBarControlFramework-Release.xcconfig b/xcconfigs/PSMTabBarControlFramework-Release.xcconfig deleted file mode 100644 index 8ef5118..0000000 --- a/xcconfigs/PSMTabBarControlFramework-Release.xcconfig +++ /dev/null @@ -1,3 +0,0 @@ -#include "Release.xcconfig" -#include "PSMTabBarControlFramework-Base.xcconfig" -INSTALL_MODE_FLAG = go-w,a+rX diff --git a/xcconfigs/Release.xcconfig b/xcconfigs/Release.xcconfig deleted file mode 100644 index 19760cc..0000000 --- a/xcconfigs/Release.xcconfig +++ /dev/null @@ -1,2 +0,0 @@ -#include "Base.xcconfig" -DEBUG_INFORMATION_FORMAT = dwarf-with-dsym