Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
  • 11 commits
  • 5 files changed
  • 0 comments
  • 3 contributors
19 AppDelegate.h
@@ -7,6 +7,7 @@
7 7 //
8 8
9 9 #import <Cocoa/Cocoa.h>
  10 +#import <QTKit/QTKit.h>
10 11 #import "INAppStoreWindow.h"
11 12
12 13 @interface AppDelegate : NSObject <NSApplicationDelegate>
@@ -17,14 +18,24 @@
17 18 @property (weak) IBOutlet NSSlider *endSlider;
18 19 @property (weak) IBOutlet NSLevelIndicator *currentTimeBar;
19 20 @property (weak) IBOutlet NSTextField *currentTimeLabel;
  21 +@property (weak) IBOutlet NSTextField *currentTrackLabel;
  22 +@property (weak) IBOutlet NSTextField *loopCountLabel;
  23 +@property (weak) IBOutlet NSStepper *loopCountStepper;
20 24
21 25 @property (assign) BOOL paused;
22   -@property (assign) double startTime;
23   -@property (assign) double endTime;
24   -@property (assign) double currentTime;
  26 +@property (assign) QTTime startTime;
  27 +@property (assign) QTTime endTime;
  28 +@property (assign) QTTime currentTime;
  29 +@property (assign) long timeScale;
  30 +@property (assign) int loopCount;
25 31
26   -@property (retain) NSSound *music;
  32 +// The value where we'll start looping infinitely.
  33 +@property (assign) int loopInfiniteCount;
  34 +
  35 +
  36 +@property (retain) QTMovie *music;
27 37 - (void)checkTime:(NSTimer*)theTimer;
  38 +- (IBAction)loopStepperStep:(id)sender;
28 39 - (IBAction)playButtonClick:(id)sender;
29 40 - (IBAction)startSliderSet:(id)sender;
30 41 - (IBAction)endSliderSet:(id)sender;
168 AppDelegate.m
@@ -8,6 +8,7 @@
8 8
9 9 #import "AppDelegate.h"
10 10 #import <CoreAudio/CoreAudio.h>
  11 +#import <QTKit/QTKit.h>
11 12
12 13 @implementation AppDelegate
13 14
@@ -17,7 +18,13 @@ @implementation AppDelegate
17 18 @synthesize currentTimeLabel;
18 19 @synthesize currentTimeBar;
19 20 @synthesize playButton;
  21 +@synthesize currentTrackLabel;
  22 +@synthesize loopCountLabel;
  23 +@synthesize loopCountStepper;
20 24
  25 +@synthesize loopCount;
  26 +@synthesize loopInfiniteCount;
  27 +@synthesize timeScale;
21 28 @synthesize startTime;
22 29 @synthesize endTime;
23 30 @synthesize currentTime;
@@ -25,95 +32,174 @@ @implementation AppDelegate
25 32 @synthesize paused;
26 33
27 34
  35 +-(void) setTheLoopCount:(int)theLoopCount
  36 +{
  37 + // Sets the property and updates the label.
  38 + [self setLoopCount:theLoopCount];
  39 + if ([self loopCount] < [self loopInfiniteCount]) {
  40 + [loopCountLabel setStringValue:[NSString stringWithFormat:@"x%d",self.loopCount]];
  41 + }
  42 + else {
  43 + [loopCountLabel setStringValue:@"∞"];
  44 + }
  45 + // Finally update the stepper so it's synchronized.
  46 + [loopCountStepper setIntValue:[self loopCount]];
  47 +}
  48 +
28 49 - (void)applicationDidFinishLaunching:(NSNotification *)aNotification
29 50 {
30   - [[self window] setTitleBarHeight:30.0];
  51 + [[self window] setTitleBarHeight:40.0];
31 52 [[self window] setTrafficLightButtonsLeftMargin:7.0];
  53 +
  54 + // - NOOP -
  55 + // Implements a very crude NSSegmentControl, used to switch between the album view
  56 + // of the track currently opened and the listening statistics for that track.
  57 + NSView *titleBarView = [[self window] titleBarView];
  58 + NSSize switcherSize = NSMakeSize(100.f, 30.f);
  59 + NSRect switcherFrame = NSMakeRect(NSMidX([titleBarView bounds]) - (switcherSize.width / 2.f), NSMidY([titleBarView bounds]) - (switcherSize.height / 2.f), switcherSize.width, switcherSize.height);
  60 + NSSegmentedControl *switcher = [[NSSegmentedControl alloc] initWithFrame:switcherFrame];
  61 + [switcher setSegmentCount:2];
  62 + [switcher setSegmentStyle:NSSegmentStyleTexturedRounded];
  63 + [switcher setLabel:@"Music" forSegment:0];
  64 + [switcher setLabel:@"Statistics" forSegment:1];
  65 + [switcher setSelectedSegment:0];
  66 + [switcher setEnabled:FALSE forSegment:1]; // Disables the statistics segment.
  67 + [[switcher cell] setTrackingMode:NSSegmentSwitchTrackingSelectOne];
  68 + [titleBarView addSubview:switcher];
  69 +
  70 + // Basic implementation of the default loop count.
  71 + // Infinity = 31 until further notice.
  72 + [self setLoopInfiniteCount:31];
  73 + [self setTheLoopCount:10];
  74 + [[self loopCountStepper] setMaxValue:(double)[self loopInfiniteCount]];
32 75 }
33 76
34   --(void) checkTime:(NSTimer*)theTimer{
  77 +-(void) checkTime:(NSTimer*)theTimer
  78 +{
35 79 currentTime = [music currentTime];
36   - if([music isPlaying]){
37   - if(currentTime >= endTime && startTime < endTime){
38   - [music setCurrentTime:startTime];
  80 +
  81 + if (currentTime.timeValue >= endTime.timeValue && startTime.timeValue < endTime.timeValue && [self loopCount] > 0){
  82 + if ([self loopCount] < [self loopInfiniteCount]) {
  83 + // [self loopInfiniteCount] is the magic infinite number.
  84 + [self setTheLoopCount:[self loopCount]-1];
39 85 }
  86 + [music setCurrentTime:startTime];
40 87 }
41 88
  89 +
42 90 NSCalendar *sysCalendar = [NSCalendar currentCalendar];
43 91
44 92 NSDate *date1 = [[NSDate alloc] init];
45   - NSDate *date2 = [[NSDate alloc] initWithTimeInterval:currentTime sinceDate:date1];
  93 + NSDate *date2 = [[NSDate alloc] initWithTimeInterval:currentTime.timeValue/timeScale sinceDate:date1];
46 94
47 95 unsigned int unitFlags = NSMinuteCalendarUnit | NSSecondCalendarUnit;
48 96
49 97 NSDateComponents *conversionInfo = [sysCalendar components:unitFlags fromDate:date1 toDate:date2 options:0];
50 98
51 99 [currentTimeLabel setStringValue:[NSString stringWithFormat:@"%02d:%02d",[conversionInfo minute],[conversionInfo second]]];
52   - [currentTimeBar setFloatValue:currentTime];
  100 + [currentTimeBar setFloatValue:(float)currentTime.timeValue];
53 101
54 102 }
55 103
56   -- (void)loadMusic:(NSURL *) fileURL {
57   - NSSound * m = [NSSound alloc];
58   - music = [m initWithContentsOfURL:fileURL byReference:YES];
59   - double maxValue = [music duration];
  104 +- (void)loadMusic:(NSURL *) fileURL
  105 +{
  106 + // Load the track from URL.
  107 + // TODO: Error handling.
  108 + music = [[QTMovie alloc] initWithURL:fileURL error:nil];
  109 +
  110 + //Really needed anymore?
60 111 paused = YES;
61   - startTime = 0.0;
62   - endTime = maxValue;
63   - [currentTimeBar setMaxValue:endTime];
  112 +
  113 + // Find and set slider max values.
  114 + QTTime maxTime = [music duration];
  115 + timeScale = [music duration].timeScale;
  116 + float maxValue = (float)maxTime.timeValue;
  117 + startTime = QTMakeTime(0.0, timeScale);
  118 + endTime = maxTime;
  119 +
  120 + [currentTimeBar setMaxValue:maxValue];
64 121 [startSlider setMaxValue:maxValue];
65 122 [startSlider setFloatValue:0.0];
66 123 [endSlider setMaxValue:maxValue];
67 124 [endSlider setFloatValue:maxValue];
68   - [startSlider setNumberOfTickMarks:(int) endTime];
69   - [endSlider setNumberOfTickMarks:(int) endTime];
  125 + [startSlider setNumberOfTickMarks:(int) maxValue/timeScale];
  126 + [endSlider setNumberOfTickMarks:(int) maxValue/timeScale];
  127 +
  128 + // Set title and artist labels from.
  129 + NSString * trackTitle = @"Unknown title";
  130 + NSString * trackArtist = @"Unknown artist";
  131 +
  132 + NSArray * mdFormatsArray = [music availableMetadataFormats];
  133 + for (int i=0;i<[mdFormatsArray count];i++) {
  134 + NSArray * mdArray = [music metadataForFormat:[mdFormatsArray objectAtIndex:i]];
  135 + // Fixme: find out why we need to replace @ with ©.
  136 + NSArray * titleMetadataItems = [QTMetadataItem metadataItemsFromArray:mdArray withKey:[QTMetadataiTunesMetadataKeySongName stringByReplacingOccurrencesOfString:@"@" withString:@"©"] keySpace:nil];
  137 + if ([titleMetadataItems count] > 0) {
  138 + trackTitle = [[titleMetadataItems objectAtIndex:0] stringValue];
  139 + }
  140 + // Fixme: find out why we need to replace @ with ©.
  141 + NSArray * artistMetadataItems = [QTMetadataItem metadataItemsFromArray:mdArray withKey:[QTMetadataiTunesMetadataKeyArtist stringByReplacingOccurrencesOfString:@"@" withString:@"©"] keySpace:nil];
  142 + if ([artistMetadataItems count] > 0) {
  143 + trackArtist = [[artistMetadataItems objectAtIndex:0] stringValue];
  144 + }
  145 + }
  146 +
  147 + [currentTrackLabel setStringValue:[NSString stringWithFormat:@"%@\n%@",trackTitle,trackArtist]];
  148 +
  149 + // Start loop and play track.
70 150 [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(checkTime:) userInfo:nil repeats:YES];
71   - [music play];
72   - [music pause];
73 151 }
74 152
75   -- (IBAction)startSliderSet:(id)sender {
76   - if([startSlider doubleValue] < endTime) {
77   - startTime = [startSlider doubleValue];
  153 +- (IBAction)startSliderSet:(id)sender
  154 +{
  155 + if ([startSlider doubleValue] < (float)endTime.timeValue) {
  156 + startTime = QTMakeTime((long)[startSlider doubleValue],timeScale);
78 157 }
79   - else{
80   - [startSlider setFloatValue:startTime];
  158 + else {
  159 + [startSlider setFloatValue:(float)startTime.timeValue];
81 160 }
82 161 }
83 162
84   -- (IBAction)endSliderSet:(id)sender {
85   - if([endSlider doubleValue] > startTime) {
86   - endTime = [endSlider doubleValue];
  163 +- (IBAction)endSliderSet:(id)sender
  164 +{
  165 + if ([endSlider doubleValue] > (float)startTime.timeValue) {
  166 + endTime = QTMakeTime((long)[endSlider doubleValue],timeScale);
87 167 }
88   - else{
89   - [endSlider setFloatValue:endTime];
  168 + else {
  169 + [endSlider setFloatValue:(float)endTime.timeValue];
90 170 }
91 171 }
92 172
93   -- (IBAction)currentTimeBarSet:(id)sender {
  173 +- (IBAction)currentTimeBarSet:(id)sender
  174 +{
94 175 NSTimeInterval ct = [currentTimeBar doubleValue];
95   - [music setCurrentTime:ct];
  176 + [music setCurrentTime:QTMakeTime((long)ct,timeScale)];
96 177 }
97 178
98   -- (IBAction)playButtonClick:(id)sender {
99   - if(!paused) {
100   - [music pause];
  179 +- (IBAction)playButtonClick:(id)sender
  180 +{
  181 + if (!paused) {
  182 + [music stop];
101 183 paused = YES;
102 184 }
103 185 else {
104   - [music resume];
  186 + [music play];
105 187 paused = NO;
106 188 }
107 189 }
108 190
109   -- (IBAction)openFile:(id)sender {
110   - NSOpenPanel *openPanel = [NSOpenPanel openPanel];
111   - NSInteger tvarNSInteger = [openPanel runModal];
  191 +- (IBAction)loopStepperStep:(id)sender
  192 +{
  193 + [self setTheLoopCount:[loopCountStepper intValue]];
  194 +}
  195 +
  196 +- (IBAction)openFile:(id)sender
  197 +{
  198 + NSOpenPanel *panel = [NSOpenPanel openPanel];
  199 + NSInteger tvarNSInteger = [panel runModal];
112 200 if(tvarNSInteger == NSOKButton){
113   - if([music isPlaying]) {
114   - [music stop];
115   - }
116   - NSURL * fileURL = [openPanel URL];
  201 + [music stop];
  202 + NSURL *fileURL = [panel URL];
117 203 [self loadMusic:fileURL];
118 204 }
119 205 }
8 Perpetual.xcodeproj/project.pbxproj
@@ -11,12 +11,14 @@
11 11 9395B6AD14EB88A8002999D9 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9395B6AC14EB88A8002999D9 /* QuartzCore.framework */; };
12 12 9395B6B014EB8D91002999D9 /* Podfile in Resources */ = {isa = PBXBuildFile; fileRef = 9395B6AF14EB8D91002999D9 /* Podfile */; };
13 13 9A041EBD14EAEBA2009AC43F /* cover.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 9A041EBC14EAEBA2009AC43F /* cover.jpg */; };
  14 + 9A31AA3414EBF3FD00382B2F /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A31AA3314EBF3FD00382B2F /* AudioToolbox.framework */; };
14 15 9AC739D314EAEAB6000A57AD /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9AC739D214EAEAB6000A57AD /* Cocoa.framework */; };
15 16 9AC739DD14EAEAB6000A57AD /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 9AC739DB14EAEAB6000A57AD /* InfoPlist.strings */; };
16 17 9AC739DF14EAEAB6000A57AD /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 9AC739DE14EAEAB6000A57AD /* main.m */; };
17 18 9AC739E314EAEAB6000A57AD /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = 9AC739E114EAEAB6000A57AD /* Credits.rtf */; };
18 19 9AC739E614EAEAB6000A57AD /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 9AC739E514EAEAB6000A57AD /* AppDelegate.m */; };
19 20 9AC739E914EAEAB6000A57AD /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9AC739E714EAEAB6000A57AD /* MainMenu.xib */; };
  21 + 9AE4EA5714EC59D6002EF094 /* QTKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9AE4EA5614EC59D6002EF094 /* QTKit.framework */; };
20 22 /* End PBXBuildFile section */
21 23
22 24 /* Begin PBXFileReference section */
@@ -24,6 +26,7 @@
24 26 9395B6AC14EB88A8002999D9 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };
25 27 9395B6AF14EB8D91002999D9 /* Podfile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Podfile; sourceTree = "<group>"; };
26 28 9A041EBC14EAEBA2009AC43F /* cover.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = cover.jpg; sourceTree = "<group>"; };
  29 + 9A31AA3314EBF3FD00382B2F /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; };
27 30 9AC739CE14EAEAB6000A57AD /* Perpetual.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Perpetual.app; sourceTree = BUILT_PRODUCTS_DIR; };
28 31 9AC739D214EAEAB6000A57AD /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; };
29 32 9AC739D514EAEAB6000A57AD /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; };
@@ -37,6 +40,7 @@
37 40 9AC739E414EAEAB6000A57AD /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
38 41 9AC739E514EAEAB6000A57AD /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
39 42 9AC739E814EAEAB6000A57AD /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/MainMenu.xib; sourceTree = "<group>"; };
  43 + 9AE4EA5614EC59D6002EF094 /* QTKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QTKit.framework; path = System/Library/Frameworks/QTKit.framework; sourceTree = SDKROOT; };
40 44 DDB3CDEF03204F9F8C7160C4 /* Pods.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Pods.xcconfig; path = Pods/Pods.xcconfig; sourceTree = SOURCE_ROOT; };
41 45 /* End PBXFileReference section */
42 46
@@ -45,6 +49,8 @@
45 49 isa = PBXFrameworksBuildPhase;
46 50 buildActionMask = 2147483647;
47 51 files = (
  52 + 9AE4EA5714EC59D6002EF094 /* QTKit.framework in Frameworks */,
  53 + 9A31AA3414EBF3FD00382B2F /* AudioToolbox.framework in Frameworks */,
48 54 9395B6AD14EB88A8002999D9 /* QuartzCore.framework in Frameworks */,
49 55 9AC739D314EAEAB6000A57AD /* Cocoa.framework in Frameworks */,
50 56 351CA58DF08E43309D0C1A7C /* libPods.a in Frameworks */,
@@ -57,6 +63,8 @@
57 63 9AC739C314EAEAB6000A57AD = {
58 64 isa = PBXGroup;
59 65 children = (
  66 + 9AE4EA5614EC59D6002EF094 /* QTKit.framework */,
  67 + 9A31AA3314EBF3FD00382B2F /* AudioToolbox.framework */,
60 68 9395B6AC14EB88A8002999D9 /* QuartzCore.framework */,
61 69 9AC739D814EAEAB6000A57AD /* Perpetual */,
62 70 9AC739D114EAEAB6000A57AD /* Frameworks */,
5 Perpetual.xcodeproj/xcuserdata/kallepersson.xcuserdatad/xcschemes/Perpetual.xcscheme
@@ -56,6 +56,11 @@
56 56 </BuildableReference>
57 57 </BuildableProductRunnable>
58 58 <AdditionalOptions>
  59 + <AdditionalOption
  60 + key = "NSZombieEnabled"
  61 + value = "YES"
  62 + isEnabled = "YES">
  63 + </AdditionalOption>
59 64 </AdditionalOptions>
60 65 </LaunchAction>
61 66 <ProfileAction
253 en.lproj/MainMenu.xib
@@ -11,6 +11,7 @@
11 11 <string key="NS.object.0">1938</string>
12 12 </object>
13 13 <array key="IBDocument.IntegratedClassDependencies">
  14 + <string>NSStepper</string>
14 15 <string>NSMenuItem</string>
15 16 <string>NSMenu</string>
16 17 <string>NSTextFieldCell</string>
@@ -22,6 +23,7 @@
22 23 <string>NSSlider</string>
23 24 <string>NSSliderCell</string>
24 25 <string>NSCustomObject</string>
  26 + <string>NSStepperCell</string>
25 27 <string>NSView</string>
26 28 <string>NSWindowTemplate</string>
27 29 <string>NSTextField</string>
@@ -289,7 +291,7 @@
289 291 <object class="NSWindowTemplate" id="972006081">
290 292 <int key="NSWindowStyleMask">7</int>
291 293 <int key="NSWindowBacking">2</int>
292   - <string key="NSWindowRect">{{715, 390}, {400, 380}}</string>
  294 + <string key="NSWindowRect">{{715, 390}, {400, 400}}</string>
293 295 <int key="NSWTFlags">1954021376</int>
294 296 <string key="NSWindowTitle">Perpetual</string>
295 297 <string key="NSWindowClass">INAppStoreWindow</string>
@@ -310,8 +312,9 @@
310 312 <string>NeXT Encapsulated PostScript v1.2 pasteboard type</string>
311 313 <string>NeXT TIFF v4.0 pasteboard type</string>
312 314 </set>
313   - <string key="NSFrame">{{-3, 127}, {406, 256}}</string>
  315 + <string key="NSFrame">{{-3, 147}, {406, 256}}</string>
314 316 <reference key="NSSuperview" ref="439893737"/>
  317 + <reference key="NSWindow"/>
315 318 <reference key="NSNextKeyView" ref="690740704"/>
316 319 <string key="NSReuseIdentifierKey">_NS:2141</string>
317 320 <bool key="NSEnabled">YES</bool>
@@ -333,14 +336,15 @@
333 336 <object class="NSButton" id="690740704">
334 337 <reference key="NSNextResponder" ref="439893737"/>
335 338 <int key="NSvFlags">268</int>
336   - <string key="NSFrame">{{8, 82}, {40, 40}}</string>
  339 + <string key="NSFrame">{{8, 102}, {40, 40}}</string>
337 340 <reference key="NSSuperview" ref="439893737"/>
338   - <reference key="NSNextKeyView" ref="353695766"/>
  341 + <reference key="NSWindow"/>
  342 + <reference key="NSNextKeyView" ref="238452651"/>
339 343 <string key="NSReuseIdentifierKey">_NS:687</string>
340 344 <bool key="NSEnabled">YES</bool>
341 345 <object class="NSButtonCell" key="NSCell" id="14965766">
342 346 <int key="NSCellFlags">67239424</int>
343   - <int key="NSCellFlags2">134250496</int>
  347 + <int key="NSCellFlags2">32768</int>
344 348 <string key="NSContents"/>
345 349 <object class="NSFont" key="NSSupport" id="556841281">
346 350 <string key="NSName">LucidaGrande</string>
@@ -349,11 +353,11 @@
349 353 </object>
350 354 <string key="NSCellIdentifier">_NS:687</string>
351 355 <reference key="NSControlView" ref="690740704"/>
352   - <int key="NSButtonFlags">922501375</int>
353   - <int key="NSButtonFlags2">130</int>
  356 + <int key="NSButtonFlags">-2038677249</int>
  357 + <int key="NSButtonFlags2">6</int>
354 358 <object class="NSCustomResource" key="NSNormalImage">
355 359 <string key="NSClassName">NSImage</string>
356   - <string key="NSResourceName">NSRightFacingTriangleTemplate</string>
  360 + <string key="NSResourceName">NSGoRightTemplate</string>
357 361 </object>
358 362 <string key="NSAlternateContents"/>
359 363 <string key="NSKeyEquivalent"/>
@@ -364,8 +368,9 @@
364 368 <object class="NSTextField" id="353695766">
365 369 <reference key="NSNextResponder" ref="439893737"/>
366 370 <int key="NSvFlags">268</int>
367   - <string key="NSFrame">{{59, 86}, {245, 34}}</string>
  371 + <string key="NSFrame">{{121, 106}, {215, 34}}</string>
368 372 <reference key="NSSuperview" ref="439893737"/>
  373 + <reference key="NSWindow"/>
369 374 <reference key="NSNextKeyView" ref="753304525"/>
370 375 <string key="NSReuseIdentifierKey">_NS:360</string>
371 376 <string key="NSAntiCompressionPriority">{250, 750}</string>
@@ -404,8 +409,9 @@
404 409 <object class="NSTextField" id="753304525">
405 410 <reference key="NSNextResponder" ref="439893737"/>
406 411 <int key="NSvFlags">268</int>
407   - <string key="NSFrame">{{319, 95}, {75, 17}}</string>
  412 + <string key="NSFrame">{{319, 115}, {75, 17}}</string>
408 413 <reference key="NSSuperview" ref="439893737"/>
  414 + <reference key="NSWindow"/>
409 415 <reference key="NSNextKeyView" ref="752942585"/>
410 416 <string key="NSReuseIdentifierKey">_NS:3944</string>
411 417 <bool key="NSEnabled">YES</bool>
@@ -423,8 +429,9 @@
423 429 <object class="NSLevelIndicator" id="840108087">
424 430 <reference key="NSNextResponder" ref="439893737"/>
425 431 <int key="NSvFlags">268</int>
426   - <string key="NSFrame">{{18, 34}, {366, 16}}</string>
  432 + <string key="NSFrame">{{18, 54}, {366, 16}}</string>
427 433 <reference key="NSSuperview" ref="439893737"/>
  434 + <reference key="NSWindow"/>
428 435 <reference key="NSNextKeyView" ref="75188771"/>
429 436 <string key="NSReuseIdentifierKey">_NS:2200</string>
430 437 <bool key="NSEnabled">YES</bool>
@@ -440,8 +447,9 @@
440 447 <object class="NSSlider" id="752942585">
441 448 <reference key="NSNextResponder" ref="439893737"/>
442 449 <int key="NSvFlags">268</int>
443   - <string key="NSFrame">{{9, 49}, {384, 26}}</string>
  450 + <string key="NSFrame">{{9, 69}, {384, 26}}</string>
444 451 <reference key="NSSuperview" ref="439893737"/>
  452 + <reference key="NSWindow"/>
445 453 <reference key="NSNextKeyView" ref="840108087"/>
446 454 <string key="NSReuseIdentifierKey">_NS:3905</string>
447 455 <bool key="NSEnabled">YES</bool>
@@ -464,9 +472,9 @@
464 472 <object class="NSSlider" id="75188771">
465 473 <reference key="NSNextResponder" ref="439893737"/>
466 474 <int key="NSvFlags">268</int>
467   - <string key="NSFrame">{{9, 9}, {384, 25}}</string>
  475 + <string key="NSFrame">{{9, 29}, {384, 25}}</string>
468 476 <reference key="NSSuperview" ref="439893737"/>
469   - <reference key="NSNextKeyView"/>
  477 + <reference key="NSWindow"/>
470 478 <string key="NSReuseIdentifierKey">_NS:3905</string>
471 479 <bool key="NSEnabled">YES</bool>
472 480 <object class="NSSliderCell" key="NSCell" id="622609772">
@@ -485,12 +493,53 @@
485 493 <bool key="NSVertical">NO</bool>
486 494 </object>
487 495 </object>
  496 + <object class="NSStepper" id="153453889">
  497 + <reference key="NSNextResponder" ref="439893737"/>
  498 + <int key="NSvFlags">268</int>
  499 + <string key="NSFrame">{{84, 109}, {19, 27}}</string>
  500 + <reference key="NSSuperview" ref="439893737"/>
  501 + <reference key="NSWindow"/>
  502 + <reference key="NSNextKeyView" ref="353695766"/>
  503 + <string key="NSReuseIdentifierKey">_NS:3914</string>
  504 + <bool key="NSEnabled">YES</bool>
  505 + <object class="NSStepperCell" key="NSCell" id="985223941">
  506 + <int key="NSCellFlags">917024</int>
  507 + <int key="NSCellFlags2">0</int>
  508 + <string key="NSCellIdentifier">_NS:3914</string>
  509 + <reference key="NSControlView" ref="153453889"/>
  510 + <double key="NSValue">10</double>
  511 + <double key="NSMaxValue">31</double>
  512 + <double key="NSIncrement">1</double>
  513 + <bool key="NSAutorepeat">YES</bool>
  514 + </object>
  515 + </object>
  516 + <object class="NSTextField" id="238452651">
  517 + <reference key="NSNextResponder" ref="439893737"/>
  518 + <int key="NSvFlags">268</int>
  519 + <string key="NSFrame">{{42, 115}, {38, 17}}</string>
  520 + <reference key="NSSuperview" ref="439893737"/>
  521 + <reference key="NSWindow"/>
  522 + <reference key="NSNextKeyView" ref="153453889"/>
  523 + <string key="NSReuseIdentifierKey">_NS:3944</string>
  524 + <bool key="NSEnabled">YES</bool>
  525 + <object class="NSTextFieldCell" key="NSCell" id="852473342">
  526 + <int key="NSCellFlags">68288064</int>
  527 + <int key="NSCellFlags2">71304192</int>
  528 + <string key="NSContents">x10</string>
  529 + <reference key="NSSupport" ref="556841281"/>
  530 + <string key="NSCellIdentifier">_NS:3944</string>
  531 + <reference key="NSControlView" ref="238452651"/>
  532 + <reference key="NSBackgroundColor" ref="515411080"/>
  533 + <reference key="NSTextColor" ref="41212231"/>
  534 + </object>
  535 + </object>
488 536 </array>
489   - <string key="NSFrameSize">{400, 380}</string>
  537 + <string key="NSFrameSize">{400, 400}</string>
490 538 <reference key="NSSuperview"/>
  539 + <reference key="NSWindow"/>
491 540 <reference key="NSNextKeyView" ref="379503995"/>
492 541 </object>
493   - <string key="NSScreenRect">{{0, 0}, {2560, 1440}}</string>
  542 + <string key="NSScreenRect">{{0, 0}, {1440, 878}}</string>
494 543 <string key="NSMaxSize">{10000000000000, 10000000000000}</string>
495 544 <bool key="NSWindowIsRestorable">YES</bool>
496 545 </object>
@@ -668,6 +717,38 @@
668 717 </object>
669 718 <int key="connectionID">612</int>
670 719 </object>
  720 + <object class="IBConnectionRecord">
  721 + <object class="IBOutletConnection" key="connection">
  722 + <string key="label">currentTrackLabel</string>
  723 + <reference key="source" ref="976324537"/>
  724 + <reference key="destination" ref="353695766"/>
  725 + </object>
  726 + <int key="connectionID">613</int>
  727 + </object>
  728 + <object class="IBConnectionRecord">
  729 + <object class="IBOutletConnection" key="connection">
  730 + <string key="label">loopCountLabel</string>
  731 + <reference key="source" ref="976324537"/>
  732 + <reference key="destination" ref="238452651"/>
  733 + </object>
  734 + <int key="connectionID">620</int>
  735 + </object>
  736 + <object class="IBConnectionRecord">
  737 + <object class="IBOutletConnection" key="connection">
  738 + <string key="label">loopCountStepper</string>
  739 + <reference key="source" ref="976324537"/>
  740 + <reference key="destination" ref="153453889"/>
  741 + </object>
  742 + <int key="connectionID">621</int>
  743 + </object>
  744 + <object class="IBConnectionRecord">
  745 + <object class="IBActionConnection" key="connection">
  746 + <string key="label">loopStepperStep:</string>
  747 + <reference key="source" ref="976324537"/>
  748 + <reference key="destination" ref="153453889"/>
  749 + </object>
  750 + <int key="connectionID">622</int>
  751 + </object>
671 752 </array>
672 753 <object class="IBMutableOrderedSet" key="objectRecords">
673 754 <array key="orderedObjects">
@@ -874,6 +955,8 @@
874 955 <reference ref="840108087"/>
875 956 <reference ref="690740704"/>
876 957 <reference ref="753304525"/>
  958 + <reference ref="238452651"/>
  959 + <reference ref="153453889"/>
877 960 </array>
878 961 <reference key="parent" ref="972006081"/>
879 962 </object>
@@ -994,6 +1077,32 @@
994 1077 <reference key="object" ref="804262355"/>
995 1078 <reference key="parent" ref="752942585"/>
996 1079 </object>
  1080 + <object class="IBObjectRecord">
  1081 + <int key="objectID">614</int>
  1082 + <reference key="object" ref="153453889"/>
  1083 + <array class="NSMutableArray" key="children">
  1084 + <reference ref="985223941"/>
  1085 + </array>
  1086 + <reference key="parent" ref="439893737"/>
  1087 + </object>
  1088 + <object class="IBObjectRecord">
  1089 + <int key="objectID">615</int>
  1090 + <reference key="object" ref="985223941"/>
  1091 + <reference key="parent" ref="153453889"/>
  1092 + </object>
  1093 + <object class="IBObjectRecord">
  1094 + <int key="objectID">617</int>
  1095 + <reference key="object" ref="238452651"/>
  1096 + <array class="NSMutableArray" key="children">
  1097 + <reference ref="852473342"/>
  1098 + </array>
  1099 + <reference key="parent" ref="439893737"/>
  1100 + </object>
  1101 + <object class="IBObjectRecord">
  1102 + <int key="objectID">618</int>
  1103 + <reference key="object" ref="852473342"/>
  1104 + <reference key="parent" ref="238452651"/>
  1105 + </object>
997 1106 </array>
998 1107 </object>
999 1108 <dictionary class="NSMutableDictionary" key="flattenedProperties">
@@ -1042,6 +1151,10 @@
1042 1151 <string key="578.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
1043 1152 <string key="579.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
1044 1153 <string key="58.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
  1154 + <string key="614.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
  1155 + <string key="615.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
  1156 + <string key="617.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
  1157 + <string key="618.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
1045 1158 <string key="72.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
1046 1159 <string key="73.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
1047 1160 <string key="79.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
@@ -1053,17 +1166,119 @@
1053 1166 <nil key="activeLocalization"/>
1054 1167 <dictionary class="NSMutableDictionary" key="localizations"/>
1055 1168 <nil key="sourceID"/>
1056   - <int key="maxID">612</int>
  1169 + <int key="maxID">622</int>
  1170 + </object>
  1171 + <object class="IBClassDescriber" key="IBDocument.Classes">
  1172 + <array class="NSMutableArray" key="referencedPartialClassDescriptions">
  1173 + <object class="IBPartialClassDescription">
  1174 + <string key="className">AppDelegate</string>
  1175 + <string key="superclassName">NSObject</string>
  1176 + <dictionary class="NSMutableDictionary" key="actions">
  1177 + <string key="currentTimeBarSet:">id</string>
  1178 + <string key="endSliderSet:">id</string>
  1179 + <string key="loopStepperStep:">id</string>
  1180 + <string key="openFile:">id</string>
  1181 + <string key="playButtonClick:">id</string>
  1182 + <string key="startSliderSet:">id</string>
  1183 + </dictionary>
  1184 + <dictionary class="NSMutableDictionary" key="actionInfosByName">
  1185 + <object class="IBActionInfo" key="currentTimeBarSet:">
  1186 + <string key="name">currentTimeBarSet:</string>
  1187 + <string key="candidateClassName">id</string>
  1188 + </object>
  1189 + <object class="IBActionInfo" key="endSliderSet:">
  1190 + <string key="name">endSliderSet:</string>
  1191 + <string key="candidateClassName">id</string>
  1192 + </object>
  1193 + <object class="IBActionInfo" key="loopStepperStep:">
  1194 + <string key="name">loopStepperStep:</string>
  1195 + <string key="candidateClassName">id</string>
  1196 + </object>
  1197 + <object class="IBActionInfo" key="openFile:">
  1198 + <string key="name">openFile:</string>
  1199 + <string key="candidateClassName">id</string>
  1200 + </object>
  1201 + <object class="IBActionInfo" key="playButtonClick:">
  1202 + <string key="name">playButtonClick:</string>
  1203 + <string key="candidateClassName">id</string>
  1204 + </object>
  1205 + <object class="IBActionInfo" key="startSliderSet:">
  1206 + <string key="name">startSliderSet:</string>
  1207 + <string key="candidateClassName">id</string>
  1208 + </object>
  1209 + </dictionary>
  1210 + <dictionary class="NSMutableDictionary" key="outlets">
  1211 + <string key="currentTimeBar">NSLevelIndicator</string>
  1212 + <string key="currentTimeLabel">NSTextField</string>
  1213 + <string key="currentTrackLabel">NSTextField</string>
  1214 + <string key="endSlider">NSSlider</string>
  1215 + <string key="loopCountLabel">NSTextField</string>
  1216 + <string key="loopCountStepper">NSStepper</string>
  1217 + <string key="playButton">NSButton</string>
  1218 + <string key="startSlider">NSSlider</string>
  1219 + <string key="window">INAppStoreWindow</string>
  1220 + </dictionary>
  1221 + <dictionary class="NSMutableDictionary" key="toOneOutletInfosByName">
  1222 + <object class="IBToOneOutletInfo" key="currentTimeBar">
  1223 + <string key="name">currentTimeBar</string>
  1224 + <string key="candidateClassName">NSLevelIndicator</string>
  1225 + </object>
  1226 + <object class="IBToOneOutletInfo" key="currentTimeLabel">
  1227 + <string key="name">currentTimeLabel</string>
  1228 + <string key="candidateClassName">NSTextField</string>
  1229 + </object>
  1230 + <object class="IBToOneOutletInfo" key="currentTrackLabel">
  1231 + <string key="name">currentTrackLabel</string>
  1232 + <string key="candidateClassName">NSTextField</string>
  1233 + </object>
  1234 + <object class="IBToOneOutletInfo" key="endSlider">
  1235 + <string key="name">endSlider</string>
  1236 + <string key="candidateClassName">NSSlider</string>
  1237 + </object>
  1238 + <object class="IBToOneOutletInfo" key="loopCountLabel">
  1239 + <string key="name">loopCountLabel</string>
  1240 + <string key="candidateClassName">NSTextField</string>
  1241 + </object>
  1242 + <object class="IBToOneOutletInfo" key="loopCountStepper">
  1243 + <string key="name">loopCountStepper</string>
  1244 + <string key="candidateClassName">NSStepper</string>
  1245 + </object>
  1246 + <object class="IBToOneOutletInfo" key="playButton">
  1247 + <string key="name">playButton</string>
  1248 + <string key="candidateClassName">NSButton</string>
  1249 + </object>
  1250 + <object class="IBToOneOutletInfo" key="startSlider">
  1251 + <string key="name">startSlider</string>
  1252 + <string key="candidateClassName">NSSlider</string>
  1253 + </object>
  1254 + <object class="IBToOneOutletInfo" key="window">
  1255 + <string key="name">window</string>
  1256 + <string key="candidateClassName">INAppStoreWindow</string>
  1257 + </object>
  1258 + </dictionary>
  1259 + <object class="IBClassDescriptionSource" key="sourceIdentifier">
  1260 + <string key="majorKey">IBProjectSource</string>
  1261 + <string key="minorKey">./Classes/AppDelegate.h</string>
  1262 + </object>
  1263 + </object>
  1264 + <object class="IBPartialClassDescription">
  1265 + <string key="className">INAppStoreWindow</string>
  1266 + <string key="superclassName">NSWindow</string>
  1267 + <object class="IBClassDescriptionSource" key="sourceIdentifier">
  1268 + <string key="majorKey">IBProjectSource</string>
  1269 + <string key="minorKey">./Classes/INAppStoreWindow.h</string>
  1270 + </object>
  1271 + </object>
  1272 + </array>
1057 1273 </object>
1058   - <object class="IBClassDescriber" key="IBDocument.Classes"/>
1059 1274 <int key="IBDocument.localizationMode">0</int>
1060 1275 <string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string>
1061 1276 <bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
1062 1277 <int key="IBDocument.defaultPropertyAccessControl">3</int>
1063 1278 <dictionary class="NSMutableDictionary" key="IBDocument.LastKnownImageSizes">
  1279 + <string key="NSGoRightTemplate">{9, 9}</string>
1064 1280 <string key="NSMenuCheckmark">{11, 11}</string>
1065 1281 <string key="NSMenuMixedState">{10, 3}</string>
1066   - <string key="NSRightFacingTriangleTemplate">{9, 9}</string>
1067 1282 <string key="cover">{300, 300}</string>
1068 1283 </dictionary>
1069 1284 </data>

No commit comments for this range

Something went wrong with that request. Please try again.