]> granicus.if.org Git - handbrake/commitdiff
MacGui: show the queue jobs count on the main window queue toolbar icon.
authorDamiano Galassi <damiog@gmail.com>
Wed, 5 Oct 2016 08:45:50 +0000 (10:45 +0200)
committerDamiano Galassi <damiog@gmail.com>
Wed, 5 Oct 2016 08:45:50 +0000 (10:45 +0200)
macosx/Assets.xcassets/showqueue.imageset/showqueue.png
macosx/Assets.xcassets/showqueue.imageset/showqueue@2x.png
macosx/English.lproj/MainWindow.xib
macosx/HBController.h
macosx/HBController.m
macosx/HBQueueController.m
macosx/HBToolbarBadgedItem.h [new file with mode: 0644]
macosx/HBToolbarBadgedItem.m [new file with mode: 0644]
macosx/HandBrake.xcodeproj/project.pbxproj

index ffcb4d70acef217ae8c84adade9d7a6f942ef5f8..43c10b436e92129351cdad912b94cdcba741b882 100644 (file)
Binary files a/macosx/Assets.xcassets/showqueue.imageset/showqueue.png and b/macosx/Assets.xcassets/showqueue.imageset/showqueue.png differ
index 2cbe097e1abf08ed01fb40b8cba20c0533e89a40..d1d155c0ad0cac8bbc872b4a1ae54b1cb4e9413b 100644 (file)
Binary files a/macosx/Assets.xcassets/showqueue.imageset/showqueue@2x.png and b/macosx/Assets.xcassets/showqueue.imageset/showqueue@2x.png differ
index ba948c027a5bc394902b83d400778acdc79fc989..ab9afcd17a32d2a5139c96e86b17789672afcc95 100644 (file)
@@ -1,9 +1,9 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="10116" systemVersion="15E65" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none">
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="11521.1" systemVersion="16B2338c" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none">
     <dependencies>
         <deployment identifier="macosx"/>
         <development version="7000" identifier="xcode"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="10116"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="11521.1"/>
     </dependencies>
     <objects>
         <customObject id="-2" userLabel="File's Owner" customClass="HBController">
@@ -14,7 +14,6 @@
                 <outlet property="fMainTabView" destination="1474" id="sl5-BZ-ymC"/>
                 <outlet property="fPictureTab" destination="eij-Sn-QmJ" id="Ccp-rO-nqD"/>
                 <outlet property="fPresetDrawer" destination="1841" id="LDc-Da-rl7"/>
-                <outlet property="fQueueStatus" destination="2006" id="o5x-Kd-lxv"/>
                 <outlet property="fRipIndicator" destination="1373" id="an5-ng-etT"/>
                 <outlet property="fScanHorizontalLine" destination="3205" id="W26-Wu-2YJ"/>
                 <outlet property="fScanIndicator" destination="3203" id="cG1-SY-gbt"/>
@@ -30,6 +29,7 @@
                 <outlet property="fSubtitlesTab" destination="5194" id="PF0-qx-Iu4"/>
                 <outlet property="fVideoTab" destination="1477" id="hFY-kK-afW"/>
                 <outlet property="openTitleView" destination="lZQ-gl-3wX" id="Wh6-fB-pWi"/>
+                <outlet property="showQueueToolbarItem" destination="HCx-ku-nF7" id="CC6-Yu-j7N"/>
                 <outlet property="window" destination="21" id="qib-ZH-aNm"/>
             </connections>
         </customObject>
@@ -66,7 +66,7 @@
                         <tabViewItems>
                             <tabViewItem label="Video" identifier="1" id="1477">
                                 <view key="view" id="1478">
-                                    <rect key="frame" x="10" y="25" width="874" height="319"/>
+                                    <rect key="frame" x="10" y="29" width="874" height="315"/>
                                     <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                                 </view>
                             </tabViewItem>
                             </binding>
                         </connections>
                     </button>
-                    <box verticalHuggingPriority="750" title="Box" boxType="separator" titlePosition="noTitle" id="1623">
+                    <box verticalHuggingPriority="750" boxType="separator" id="1623">
                         <rect key="frame" x="98" y="490" width="802" height="5"/>
                         <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
-                        <color key="borderColor" white="0.0" alpha="0.41999999999999998" colorSpace="calibratedWhite"/>
-                        <color key="fillColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
-                        <font key="titleFont" metaFont="system"/>
                     </box>
                     <textField verticalHuggingPriority="750" id="1539">
                         <rect key="frame" x="70" y="540" width="310" height="14"/>
                             <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
                         </textFieldCell>
                     </textField>
-                    <box verticalHuggingPriority="750" title="Box" boxType="separator" titlePosition="noTitle" id="1628">
+                    <box verticalHuggingPriority="750" boxType="separator" id="1628">
                         <rect key="frame" x="292" y="434" width="608" height="5"/>
                         <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
-                        <color key="borderColor" white="0.0" alpha="0.41999999999999998" colorSpace="calibratedWhite"/>
-                        <color key="fillColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
-                        <font key="titleFont" metaFont="system"/>
                     </box>
                     <textField verticalHuggingPriority="750" id="1882">
                         <rect key="frame" x="121" y="430" width="165" height="14"/>
                             <binding destination="-2" name="value" keyPath="self.job.presetName" id="W9D-4K-e1F"/>
                         </connections>
                     </textField>
-                    <textField verticalHuggingPriority="750" id="2006">
-                        <rect key="frame" x="685" y="15" width="218" height="14"/>
-                        <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/>
-                        <textFieldCell key="cell" controlSize="small" sendsActionOnEndEditing="YES" alignment="right" id="4925">
-                            <font key="font" metaFont="smallSystem"/>
-                            <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
-                            <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
-                        </textFieldCell>
-                    </textField>
                     <textField verticalHuggingPriority="750" id="1556">
                         <rect key="frame" x="21" y="403" width="53" height="14"/>
                         <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
                             <binding destination="-2" name="textColor" keyPath="self.labelColor" id="j6q-iC-kqw"/>
                         </connections>
                     </textField>
-                    <box verticalHuggingPriority="750" title="Box" boxType="separator" titlePosition="noTitle" id="3205">
+                    <box verticalHuggingPriority="750" boxType="separator" id="3205">
                         <rect key="frame" x="391" y="543" width="509" height="5"/>
                         <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/>
-                        <color key="borderColor" white="0.0" alpha="0.41999999999999998" colorSpace="calibratedWhite"/>
-                        <color key="fillColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
-                        <font key="titleFont" metaFont="system"/>
                     </box>
                     <progressIndicator hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" maxValue="1" bezeled="NO" controlSize="small" style="bar" id="3203">
                         <rect key="frame" x="391" y="542" width="510" height="12"/>
@@ -630,11 +612,15 @@ IA
                         </connections>
                     </toolbarItem>
                     <toolbarItem implicitItemIdentifier="69E83092-D0D1-48A5-BF46-99EFB3EC630A" label="Add To Queue" paletteLabel="Add To Queue" tag="-1" image="addqueue" id="DZZ-Fe-wjw">
+                        <size key="minSize" width="32" height="32"/>
+                        <size key="maxSize" width="32" height="32"/>
                         <connections>
                             <action selector="addToQueue:" target="-2" id="TRB-HE-1GW"/>
                         </connections>
                     </toolbarItem>
-                    <toolbarItem implicitItemIdentifier="6EFCA879-A80D-45D7-A846-EAD85261F864" label="Queue" paletteLabel="Show Queue Window" tag="-1" image="showqueue" id="HCx-ku-nF7">
+                    <toolbarItem implicitItemIdentifier="6EFCA879-A80D-45D7-A846-EAD85261F864" label="Queue" paletteLabel="Show Queue Window" tag="-1" image="showqueue" id="HCx-ku-nF7" customClass="HBToolbarBadgedItem">
+                        <size key="minSize" width="40" height="32"/>
+                        <size key="maxSize" width="40" height="32"/>
                         <connections>
                             <action selector="showQueueWindow:" target="-1" id="vZB-dY-DbD"/>
                         </connections>
@@ -672,7 +658,7 @@ IA
             <connections>
                 <outlet property="delegate" destination="-2" id="M3v-Rc-7Ca"/>
             </connections>
-            <point key="canvasLocation" x="1113" y="13"/>
+            <point key="canvasLocation" x="1327" y="25"/>
         </window>
         <drawer trailingOffset="15" id="1841" userLabel="PresetsDrawer">
             <size key="contentSize" width="240" height="550"/>
@@ -727,12 +713,12 @@ IA
     </objects>
     <resources>
         <image name="activity" width="24" height="24"/>
-        <image name="addqueue" width="12" height="12"/>
+        <image name="addqueue" width="32" height="32"/>
         <image name="encode" width="24" height="24"/>
         <image name="pauseencode" width="24" height="24"/>
         <image name="presets" width="24" height="24"/>
         <image name="preview" width="24" height="24"/>
-        <image name="showqueue" width="24" height="24"/>
+        <image name="showqueue" width="32" height="32"/>
         <image name="source" width="24" height="24"/>
     </resources>
 </document>
index 9d9c3f46c51761a341c244eaa5a06f7bcd99b848..5385c914bf34ace06827ed5308658059a1368947 100644 (file)
@@ -28,7 +28,7 @@
 - (IBAction)addToQueue:(id)sender;
 - (IBAction)addAllTitlesToQueue:(id)sender;
 
-- (void)setQueueState:(NSString *)info;
+- (void)setQueueState:(NSUInteger)count;
 - (void)setQueueInfo:(NSString *)info progress:(double)progress hidden:(BOOL)hidden;
 
 - (IBAction)rip:(id)sender;
index 7dfa6170912f01a7ffdfbd838d8e2579efe801f7..b6c06f519398c73b16ebd654780c3d417cb43fd0 100644 (file)
@@ -6,7 +6,7 @@
 
 #import "HBController.h"
 #import "HBFocusRingView.h"
-
+#import "HBToolbarBadgedItem.h"
 #import "HBQueueController.h"
 #import "HBTitleSelectionController.h"
 
@@ -82,7 +82,6 @@
 
     // Bottom
     IBOutlet NSTextField         * fStatusField;
-    IBOutlet NSTextField         * fQueueStatus;
     IBOutlet NSProgressIndicator * fRipIndicator;
     BOOL                           fRipIndicatorShown;
 
@@ -93,6 +92,8 @@
     IBOutlet NSDrawer            * fPresetDrawer;
 }
 
+@property (nonatomic, weak) IBOutlet HBToolbarBadgedItem *showQueueToolbarItem;
+
 @property (unsafe_unretained) IBOutlet NSView *openTitleView;
 @property (nonatomic, readwrite) BOOL scanSpecificTitle;
 @property (nonatomic, readwrite) NSInteger scanSpecificTitleIdx;
 
 #pragma mark - Queue progress
 
-- (void)setQueueState:(NSString *)info
+- (void)setQueueState:(NSUInteger)count
 {
-    fQueueStatus.stringValue = info;
+    self.showQueueToolbarItem.badgeValue = count ? @(count).stringValue : nil;
 }
 
 #define WINDOW_HEIGHT 591
index 0fa541a2d665f94e8224bd14332102bc2a00dff6..53aef5e05370f66c71b6c5ad950daf7e9c5e7d3f 100644 (file)
     }
 
     self.countTextField.stringValue = string;
-    [self.controller setQueueState:string];
+    [self.controller setQueueState:pendingCount];
 
     self.pendingItemsCount = pendingCount;
     self.completedItemsCount = completedCount;
diff --git a/macosx/HBToolbarBadgedItem.h b/macosx/HBToolbarBadgedItem.h
new file mode 100644 (file)
index 0000000..401918d
--- /dev/null
@@ -0,0 +1,17 @@
+/* HBToolbarBadgedItem.h
+
+ This file is part of the HandBrake source code.
+ Homepage: <http://handbrake.fr/>.
+ It may be used under the terms of the GNU General Public License.
+ */
+
+#import <Cocoa/Cocoa.h>
+
+@interface HBToolbarBadgedItem : NSToolbarItem
+
+@property (nonatomic, copy) NSString *badgeValue;
+
+@property (nonatomic, copy) NSColor *badgeTextColor;
+@property (nonatomic, copy) NSColor *badgeFillColor;
+
+@end
diff --git a/macosx/HBToolbarBadgedItem.m b/macosx/HBToolbarBadgedItem.m
new file mode 100644 (file)
index 0000000..1351747
--- /dev/null
@@ -0,0 +1,210 @@
+/* HBToolbarBadgedItem.m
+
+ This file is part of the HandBrake source code.
+ Homepage: <http://handbrake.fr/>.
+ It may be used under the terms of the GNU General Public License.
+ */
+
+#import "HBToolbarBadgedItem.h"
+
+@interface HBToolbarBadgedItem ()
+
+@property (nonatomic) NSImage *primary;
+@property (nonatomic) NSImage *cache;
+
+@end
+
+@implementation HBToolbarBadgedItem
+
+- (instancetype)initWithItemIdentifier:(NSString *)itemIdentifier
+{
+    self = [super initWithItemIdentifier:itemIdentifier];
+    if (self)
+    {
+        _badgeFillColor = [NSColor redColor];
+        _badgeTextColor = [NSColor whiteColor];
+    }
+    return self;
+}
+
+- (void)awakeFromNib
+{
+    if ([self respondsToSelector:@selector(awakeFromNib)])
+    {
+        [super awakeFromNib];
+    }
+
+    [self HB_refreshBadge];
+}
+
+#pragma mark - Public
+
+- (void)setImage:(NSImage *)image
+{
+    _primary = image;
+    if (_badgeValue.length)
+    {
+        _cache = nil;
+        [super setImage:[self HB_badgeImage:_badgeValue]];
+    }
+    else
+    {
+        [super setImage:image];
+    }
+}
+
+- (void)setBadgeValue:(NSString *)badgeValue
+{
+    if (![_badgeValue isEqualToString:badgeValue])
+    {
+        if (badgeValue.length)
+        {
+            [super setImage:[self HB_badgeImage:badgeValue]];
+        }
+        else
+        {
+            [super setImage:_primary];
+        }
+        _badgeValue = [badgeValue copy];
+    }
+}
+
+- (void)setBadgeTextColor:(NSColor *)badgeTextColor
+{
+    _badgeTextColor = [badgeTextColor copy];
+
+    [self HB_refreshBadge];
+}
+
+- (void)setBadgeFillColor:(NSColor *)badgeFillColor
+{
+    _badgeFillColor = [badgeFillColor copy];
+
+    [self HB_refreshBadge];
+}
+
+#pragma mark -- Private Methods
+
+- (CGColorRef)HB_NSColorToCGColor:(NSColor *)color
+{
+    // CGColor property of NSColor has been added only in 10.8,
+    // we need to support 10.7 too.
+    NSInteger numberOfComponents = [color numberOfComponents];
+    CGFloat components[numberOfComponents];
+    CGColorSpaceRef colorSpace = [[color colorSpace] CGColorSpace];
+    [color getComponents:(CGFloat *)&components];
+    CGColorRef cgColor = CGColorCreate(colorSpace, components);
+
+    return cgColor;
+}
+
+- (void)HB_refreshBadge
+{
+    if (_badgeValue.length)
+    {
+        _cache = [self HB_renderImage:_primary withBadge:_badgeValue];
+        [super setImage:_cache];
+    }
+}
+
+- (NSImage *)HB_badgeImage:(NSString *)badgeValue
+{
+    if (![_badgeValue isEqualToString:badgeValue] || _cache == nil)
+    {
+        _cache = [self HB_renderImage:_primary withBadge:badgeValue];
+    }
+    return _cache;
+}
+
+- (NSImage *)HB_renderImage:(NSImage *)image withBadge:(NSString *)badge
+{
+    NSMutableParagraphStyle *paragraphStyle = [[NSParagraphStyle defaultParagraphStyle] mutableCopy];
+    paragraphStyle.minimumLineHeight = 0.0f;
+
+    NSImage *newImage = [[NSImage alloc] initWithSize:image.size];
+    for (NSImageRep *rep in image.representations)
+    {
+        NSSize size = rep.size;
+        NSBitmapImageRep *newRep = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes:NULL
+                                                                           pixelsWide:(NSInteger)floor(size.width)
+                                                                           pixelsHigh:(NSInteger)floor(size.height)
+                                                                        bitsPerSample:8
+                                                                      samplesPerPixel:4
+                                                                             hasAlpha:YES
+                                                                             isPlanar:NO
+                                                                       colorSpaceName:NSDeviceRGBColorSpace
+                                                                          bytesPerRow:(NSInteger)floor(size.width) * 4
+                                                                         bitsPerPixel:32];
+
+        NSGraphicsContext *ctx = [NSGraphicsContext graphicsContextWithBitmapImageRep:newRep];
+        [NSGraphicsContext saveGraphicsState];
+        [NSGraphicsContext setCurrentContext:ctx];
+
+        CGContextRef context = (CGContextRef)[[NSGraphicsContext currentContext] graphicsPort];
+        CGContextSaveGState(context);
+
+        NSRect imageRect = NSMakeRect(0, 0, size.width, size.height);
+        CGImageRef ref = [image CGImageForProposedRect:&imageRect context:[NSGraphicsContext currentContext] hints:nil];
+        CGContextDrawImage(context, imageRect, ref);
+
+        // Work out the area
+        CGFloat iconsize = size.width * 0.5f;
+        CGFloat radius = iconsize * 0.5f;
+        NSPoint indent = NSMakePoint(10, 2);
+
+        NSFont *font = [NSFont boldSystemFontOfSize:10];
+        NSDictionary *attr = @{NSParagraphStyleAttributeName : paragraphStyle,
+                     NSFontAttributeName : font,
+                     NSForegroundColorAttributeName : _badgeTextColor };
+
+        NSRect textSize = [badge boundingRectWithSize:NSZeroSize options:NSStringDrawingOneShot attributes:attr];
+        NSRect badgeRect = NSMakeRect(size.width - textSize.size.width - indent.x, size.height - textSize.size.height - indent.y,
+                                      textSize.size.width + indent.x, textSize.size.height + indent.y);
+
+        // Draw the ellipse
+        CGFloat minx = CGRectGetMinX(badgeRect);
+        CGFloat midx = CGRectGetMidX(badgeRect);
+        CGFloat maxx = CGRectGetMaxX(badgeRect);
+        CGFloat miny = CGRectGetMinY(badgeRect);
+        CGFloat midy = CGRectGetMidY(badgeRect);
+        CGFloat maxy = CGRectGetMaxY(badgeRect);
+
+        // Fill the ellipse
+        CGContextSaveGState(context);
+        CGContextBeginPath(context);
+        CGContextMoveToPoint(context, minx, midy);
+        CGContextAddArcToPoint(context, minx, miny, midx, miny, radius);
+        CGContextAddArcToPoint(context, maxx, miny, maxx, midy, radius);
+        CGContextAddArcToPoint(context, maxx, maxy, midx, maxy, radius);
+        CGContextAddArcToPoint(context, minx, maxy, minx, midy, radius);
+        CGContextClosePath(context);
+        CGContextSetFillColorWithColor(context, [self HB_NSColorToCGColor:_badgeFillColor]);
+        CGContextDrawPath(context, kCGPathFill);
+
+        // Draw the text
+        NSRect textBounds = [badge boundingRectWithSize:NSZeroSize
+                                                options:NSStringDrawingUsesDeviceMetrics
+                                             attributes:attr];
+
+        badgeRect.origin.x = CGRectGetMidX(badgeRect) - (textSize.size.width * 0.5f);
+        badgeRect.origin.x -= (textBounds.size.width - textSize.size.width) * 0.5f;
+        badgeRect.origin.y = CGRectGetMidY(badgeRect);
+        badgeRect.origin.y -= textBounds.origin.y;
+        badgeRect.origin.y -= ((textBounds.size.height - textSize.origin.y) * 0.5f);
+
+        badgeRect.size.height = textSize.size.height;
+        badgeRect.size.width = textSize.size.width;
+        [badge drawInRect:badgeRect withAttributes:attr];
+
+        CGContextRestoreGState(context);
+
+        CGContextFlush(context);
+        CGContextRestoreGState(context);
+
+        [newImage addRepresentation:newRep];
+    }
+
+    return newImage;
+}
+
+@end
index 8fed74d9312cdfb82cc21b3cdb04994716f0639e..92ddd87c35503adff90ccbe45082282852c9e097 100644 (file)
                A932E26C1988334B0047D13E /* AudioDefaults.xib in Resources */ = {isa = PBXBuildFile; fileRef = A932E26A1988334B0047D13E /* AudioDefaults.xib */; };
                A9350F501CCA7F490089F970 /* HBQTKitPlayer.m in Sources */ = {isa = PBXBuildFile; fileRef = A9350F4E1CCA7C3B0089F970 /* HBQTKitPlayer.m */; };
                A937EECB1C6C7C0300EEAE6D /* dsa_pub.pem in Resources */ = {isa = PBXBuildFile; fileRef = A937EECA1C6C7C0300EEAE6D /* dsa_pub.pem */; };
+               A93B49221DA3AA6900DD70A3 /* HBToolbarBadgedItem.m in Sources */ = {isa = PBXBuildFile; fileRef = A93B49211DA3AA6900DD70A3 /* HBToolbarBadgedItem.m */; };
                A93E0ED31972957000FD67FB /* HBVideoController.m in Sources */ = {isa = PBXBuildFile; fileRef = A93E0ED11972957000FD67FB /* HBVideoController.m */; };
                A93E0ED71972958C00FD67FB /* Video.xib in Resources */ = {isa = PBXBuildFile; fileRef = A93E0ED51972958C00FD67FB /* Video.xib */; };
                A94A98F51C858EFB004BA9BA /* HBDictTests.m in Sources */ = {isa = PBXBuildFile; fileRef = A94A98F41C858EFB004BA9BA /* HBDictTests.m */; };
                A937EECA1C6C7C0300EEAE6D /* dsa_pub.pem */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = dsa_pub.pem; sourceTree = "<group>"; };
                A93B0DF61C804CF50051A3FA /* NSDictionary+HBAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSDictionary+HBAdditions.h"; sourceTree = "<group>"; };
                A93B0DF71C804CF50051A3FA /* NSDictionary+HBAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSDictionary+HBAdditions.m"; sourceTree = "<group>"; };
+               A93B49201DA3AA6900DD70A3 /* HBToolbarBadgedItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HBToolbarBadgedItem.h; sourceTree = "<group>"; };
+               A93B49211DA3AA6900DD70A3 /* HBToolbarBadgedItem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HBToolbarBadgedItem.m; sourceTree = "<group>"; };
                A93E0ED01972957000FD67FB /* HBVideoController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HBVideoController.h; sourceTree = "<group>"; };
                A93E0ED11972957000FD67FB /* HBVideoController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HBVideoController.m; sourceTree = "<group>"; };
                A93E0ED61972958C00FD67FB /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = Video.xib; sourceTree = "<group>"; };
                                A9D0FA761C1C284D0003F2A9 /* HBFocusRingView.m */,
                                A9D0FA781C1C36820003F2A9 /* HBTabView.h */,
                                A9D0FA791C1C36820003F2A9 /* HBTabView.m */,
+                               A93B49201DA3AA6900DD70A3 /* HBToolbarBadgedItem.h */,
+                               A93B49211DA3AA6900DD70A3 /* HBToolbarBadgedItem.m */,
                        );
                        name = "UI Views";
                        sourceTree = "<group>";
                                A96664BA1CCE493D00DA4A57 /* HBEncodingProgressHUDController.m in Sources */,
                                A9BB0F2719A0ECE40079F1C1 /* HBHUDButtonCell.m in Sources */,
                                A9706CB71AC1437800BAEAA8 /* HBExceptionAlertController.m in Sources */,
+                               A93B49221DA3AA6900DD70A3 /* HBToolbarBadgedItem.m in Sources */,
                                A92268781A6E555500A8D5C5 /* HBAppDelegate.m in Sources */,
                                A98036CD1CCA91DD007661AA /* HBAVPlayer.m in Sources */,
                                A9BC24C91A69293E007DC41A /* HBAttributedStringAdditions.m in Sources */,