vspader / Cog (http://cogx.org/)

Cog, an audio player for Mac OS X.

Clone this repository (size: 34.4 MB): HTTPS / SSH
$ hg clone http://bitbucket.org/vspader/cog/
commit 927: 9e8466c6ad67
parent 926: 4d7954a8f104
branch: cog
Enhancements to File Tree (contextual menu, sort order, etc.). Added File Tree contextual menu (Add to Playlist, Show in Finder, etc.). File Tree and additions to play list now use Finder sort order. File Tree Root can be set via its popup menu or drag and drop from File Tree. Alias names are now shown in File Tree (aliases are still resolved). Added option to skip reading of cue sheets when adding a folder to play list.
mscott
7 months ago

Changed (Δ24.1 KB):

raw changeset »

Cog.xcodeproj/project.pbxproj (6 lines added, 0 lines removed)

English.lproj/FileTree.xib (267 lines added, 33 lines removed)

English.lproj/MainMenu.xib (97 lines added, 46 lines removed)

FileTree/DirectoryNode.m (1 lines added, 1 lines removed)

FileTree/FileTreeController.h (5 lines added, 0 lines removed)

FileTree/FileTreeController.m (34 lines added, 0 lines removed)

FileTree/FileTreeDataSource.h (3 lines added, 1 lines removed)

FileTree/FileTreeDataSource.m (24 lines added, 2 lines removed)

FileTree/FileTreeOutlineView.m (53 lines added, 0 lines removed)

FileTree/FileTreeViewController.h (2 lines added, 0 lines removed)

FileTree/FileTreeViewController.m (9 lines added, 1 lines removed)

FileTree/PathNode.h (2 lines added, 0 lines removed)

FileTree/PathNode.m (15 lines added, 7 lines removed)

Playlist/PlaylistLoader.h (5 lines added, 0 lines removed)

Playlist/PlaylistLoader.m (23 lines added, 2 lines removed)

Preferences/General/English.lproj/Preferences.xib (160 lines added, 61 lines removed)

Utils/NSString+FinderCompare.h (18 lines added, 0 lines removed)

Utils/NSString+FinderCompare.m (46 lines added, 0 lines removed)

Up to file-list Cog.xcodeproj/project.pbxproj:

168
168
		8E9A30160BA792DC0091081B /* NSFileHandle+CreateFile.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E9A30140BA792DC0091081B /* NSFileHandle+CreateFile.m */; };
169
169
		99EAACA80DD1BB7A00423C38 /* APL.bundle in CopyFiles */ = {isa = PBXBuildFile; fileRef = 566D321B0D538550004466A5 /* APL.bundle */; };
170
170
		B09E96630D74A7BC0064F138 /* stop_current.png in Resources */ = {isa = PBXBuildFile; fileRef = B09E96620D74A7BC0064F138 /* stop_current.png */; };
171
		F6F96719102C709000D2C9B4 /* NSString+FinderCompare.m in Sources */ = {isa = PBXBuildFile; fileRef = F6F96718102C709000D2C9B4 /* NSString+FinderCompare.m */; };
171
172
/* End PBXBuildFile section */
172
173
173
174
/* Begin PBXContainerItemProxy section */
768
769
		8E9A30140BA792DC0091081B /* NSFileHandle+CreateFile.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSFileHandle+CreateFile.m"; sourceTree = "<group>"; };
769
770
		B09E94300D747F7B0064F138 /* WMA.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = WMA.xcodeproj; path = Plugins/WMA/WMA.xcodeproj; sourceTree = "<group>"; };
770
771
		B09E96620D74A7BC0064F138 /* stop_current.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = stop_current.png; path = Images/stop_current.png; sourceTree = "<group>"; };
772
		F6F96718102C709000D2C9B4 /* NSString+FinderCompare.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+FinderCompare.m"; sourceTree = "<group>"; };
773
		F6F9671A102C70C800D2C9B4 /* NSString+FinderCompare.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+FinderCompare.h"; sourceTree = "<group>"; };
771
774
/* End PBXFileReference section */
772
775
773
776
/* Begin PBXFrameworksBuildPhase section */
936
939
				178456110F631E31007E8021 /* SideViewController.m */,
937
940
				172A12A70F59AF8A0078EF0C /* NSString+CogSort.h */,
938
941
				172A12A80F59AF8A0078EF0C /* NSString+CogSort.m */,
942
				F6F9671A102C70C800D2C9B4 /* NSString+FinderCompare.h */,
943
				F6F96718102C709000D2C9B4 /* NSString+FinderCompare.m */,
939
944
				8E9A30130BA792DC0091081B /* NSFileHandle+CreateFile.h */,
940
945
				8E9A30140BA792DC0091081B /* NSFileHandle+CreateFile.m */,
941
946
				07E18DF10D62B38400BB0E11 /* NSArray+ShuffleUtils.h */,
1936
1941
				171CB3DC0F63670D0047EF0A /* PreferencesWindow.m in Sources */,
1937
1942
				1778D3CA0F645BF00037E7A0 /* MissingAlbumArtTransformer.m in Sources */,
1938
1943
				17FAEBAC0F662985007C8707 /* ToolTipTextField.m in Sources */,
1944
				F6F96719102C709000D2C9B4 /* NSString+FinderCompare.m in Sources */,
1939
1945
			);
1940
1946
			runOnlyForDeploymentPostprocessing = 0;
1941
1947
		};

Up to file-list English.lproj/FileTree.xib:

2
2
<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.03">
3
3
	<data>
4
4
		<int key="IBDocument.SystemTarget">1050</int>
5
		<string key="IBDocument.SystemVersion">9G55</string>
5
		<string key="IBDocument.SystemVersion">9L30</string>
6
6
		<string key="IBDocument.InterfaceBuilderVersion">677</string>
7
		<string key="IBDocument.AppKitVersion">949.43</string>
7
		<string key="IBDocument.AppKitVersion">949.54</string>
8
8
		<string key="IBDocument.HIToolboxVersion">353.00</string>
9
9
		<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
10
10
			<bool key="EncodedWithXMLCoder">YES</bool>
11
			<integer value="64"/>
11
			<integer value="70"/>
12
			<integer value="110"/>
12
13
		</object>
13
14
		<object class="NSArray" key="IBDocument.PluginDependencies">
14
15
			<bool key="EncodedWithXMLCoder">YES</bool>
231
232
			<object class="NSCustomObject" id="787785768">
232
233
				<string key="NSClassName">FileTreeController</string>
233
234
			</object>
235
			<object class="NSMenu" id="678143084">
236
				<string key="NSTitle">Menu</string>
237
				<object class="NSMutableArray" key="NSMenuItems">
238
					<bool key="EncodedWithXMLCoder">YES</bool>
239
					<object class="NSMenuItem" id="32540513">
240
						<reference key="NSMenu" ref="678143084"/>
241
						<string key="NSTitle">Add to Playlist</string>
242
						<string key="NSKeyEquiv"/>
243
						<int key="NSKeyEquivModMask">1048576</int>
244
						<int key="NSMnemonicLoc">2147483647</int>
245
						<object class="NSCustomResource" key="NSOnImage" id="910204761">
246
							<string key="NSClassName">NSImage</string>
247
							<string key="NSResourceName">NSMenuCheckmark</string>
248
						</object>
249
						<object class="NSCustomResource" key="NSMixedImage" id="445753600">
250
							<string key="NSClassName">NSImage</string>
251
							<string key="NSResourceName">NSMenuMixedState</string>
252
						</object>
253
						<int key="NSTag">1</int>
254
					</object>
255
					<object class="NSMenuItem" id="963515567">
256
						<reference key="NSMenu" ref="678143084"/>
257
						<string key="NSTitle">Set as Playlist</string>
258
						<string key="NSKeyEquiv"/>
259
						<int key="NSKeyEquivModMask">1048576</int>
260
						<int key="NSMnemonicLoc">2147483647</int>
261
						<reference key="NSOnImage" ref="910204761"/>
262
						<reference key="NSMixedImage" ref="445753600"/>
263
						<int key="NSTag">2</int>
264
					</object>
265
					<object class="NSMenuItem" id="861316845">
266
						<reference key="NSMenu" ref="678143084"/>
267
						<bool key="NSIsDisabled">YES</bool>
268
						<bool key="NSIsSeparator">YES</bool>
269
						<string key="NSTitle"/>
270
						<string key="NSKeyEquiv"/>
271
						<int key="NSMnemonicLoc">2147483647</int>
272
						<reference key="NSOnImage" ref="910204761"/>
273
						<reference key="NSMixedImage" ref="445753600"/>
274
					</object>
275
					<object class="NSMenuItem" id="1058871911">
276
						<reference key="NSMenu" ref="678143084"/>
277
						<string key="NSTitle">Show in Finder</string>
278
						<string key="NSKeyEquiv"/>
279
						<int key="NSKeyEquivModMask">1048576</int>
280
						<int key="NSMnemonicLoc">2147483647</int>
281
						<reference key="NSOnImage" ref="910204761"/>
282
						<reference key="NSMixedImage" ref="445753600"/>
283
						<int key="NSTag">3</int>
284
					</object>
285
					<object class="NSMenuItem" id="1058107516">
286
						<reference key="NSMenu" ref="678143084"/>
287
						<bool key="NSIsDisabled">YES</bool>
288
						<bool key="NSIsSeparator">YES</bool>
289
						<string key="NSTitle"/>
290
						<string key="NSKeyEquiv"/>
291
						<int key="NSMnemonicLoc">2147483647</int>
292
						<reference key="NSOnImage" ref="910204761"/>
293
						<reference key="NSMixedImage" ref="445753600"/>
294
					</object>
295
					<object class="NSMenuItem" id="825861932">
296
						<reference key="NSMenu" ref="678143084"/>
297
						<string key="NSTitle">Set as Root</string>
298
						<string key="NSKeyEquiv"/>
299
						<int key="NSKeyEquivModMask">1048576</int>
300
						<int key="NSMnemonicLoc">2147483647</int>
301
						<reference key="NSOnImage" ref="910204761"/>
302
						<reference key="NSMixedImage" ref="445753600"/>
303
						<int key="NSTag">4</int>
304
					</object>
305
				</object>
306
			</object>
234
307
		</object>
235
308
		<object class="IBObjectContainer" key="IBDocument.Objects">
236
309
			<object class="NSMutableArray" key="connectionRecords">
289
362
				</object>
290
363
				<object class="IBConnectionRecord">
291
364
					<object class="IBBindingConnection" key="connection">
292
						<string key="label">value: values.fileTreeRootURL</string>
293
						<reference key="source" ref="299841028"/>
294
						<reference key="destination" ref="419060898"/>
295
						<object class="NSNibBindingConnector" key="connector">
296
							<reference key="NSSource" ref="299841028"/>
297
							<reference key="NSDestination" ref="419060898"/>
298
							<string key="NSLabel">value: values.fileTreeRootURL</string>
299
							<string key="NSBinding">value</string>
300
							<string key="NSKeyPath">values.fileTreeRootURL</string>
301
							<object class="NSDictionary" key="NSOptions">
302
								<string key="NS.key.0">NSValueTransformerName</string>
303
								<string key="NS.object.0">StringToURLTransformer</string>
304
							</object>
305
							<int key="NSNibBindingConnectorVersion">2</int>
306
						</object>
307
					</object>
308
					<int key="connectionID">89</int>
309
				</object>
310
				<object class="IBConnectionRecord">
311
					<object class="IBBindingConnection" key="connection">
312
365
						<string key="label">fontSize: values.fontSize</string>
313
366
						<reference key="source" ref="574801183"/>
314
367
						<reference key="destination" ref="419060898"/>
371
424
					</object>
372
425
					<int key="connectionID">106</int>
373
426
				</object>
427
				<object class="IBConnectionRecord">
428
					<object class="IBBindingConnection" key="connection">
429
						<string key="label">value: values.fileTreeRootURL</string>
430
						<reference key="source" ref="299841028"/>
431
						<reference key="destination" ref="419060898"/>
432
						<object class="NSNibBindingConnector" key="connector">
433
							<reference key="NSSource" ref="299841028"/>
434
							<reference key="NSDestination" ref="419060898"/>
435
							<string key="NSLabel">value: values.fileTreeRootURL</string>
436
							<string key="NSBinding">value</string>
437
							<string key="NSKeyPath">values.fileTreeRootURL</string>
438
							<object class="NSDictionary" key="NSOptions">
439
								<string key="NS.key.0">NSValueTransformerName</string>
440
								<string key="NS.object.0">StringToURLTransformer</string>
441
							</object>
442
							<int key="NSNibBindingConnectorVersion">2</int>
443
						</object>
444
					</object>
445
					<int key="connectionID">108</int>
446
				</object>
447
				<object class="IBConnectionRecord">
448
					<object class="IBOutletConnection" key="connection">
449
						<string key="label">pathControl</string>
450
						<reference key="source" ref="381152635"/>
451
						<reference key="destination" ref="299841028"/>
452
					</object>
453
					<int key="connectionID">109</int>
454
				</object>
455
				<object class="IBConnectionRecord">
456
					<object class="IBOutletConnection" key="connection">
457
						<string key="label">menu</string>
458
						<reference key="source" ref="357233152"/>
459
						<reference key="destination" ref="678143084"/>
460
					</object>
461
					<int key="connectionID">121</int>
462
				</object>
463
				<object class="IBConnectionRecord">
464
					<object class="IBActionConnection" key="connection">
465
						<string key="label">addToPlaylist:</string>
466
						<reference key="source" ref="787785768"/>
467
						<reference key="destination" ref="32540513"/>
468
					</object>
469
					<int key="connectionID">122</int>
470
				</object>
471
				<object class="IBConnectionRecord">
472
					<object class="IBActionConnection" key="connection">
473
						<string key="label">showEntryInFinder:</string>
474
						<reference key="source" ref="787785768"/>
475
						<reference key="destination" ref="1058871911"/>
476
					</object>
477
					<int key="connectionID">123</int>
478
				</object>
479
				<object class="IBConnectionRecord">
480
					<object class="IBActionConnection" key="connection">
481
						<string key="label">setAsRoot:</string>
482
						<reference key="source" ref="787785768"/>
483
						<reference key="destination" ref="825861932"/>
484
					</object>
485
					<int key="connectionID">125</int>
486
				</object>
487
				<object class="IBConnectionRecord">
488
					<object class="IBActionConnection" key="connection">
489
						<string key="label">setAsPlaylist:</string>
490
						<reference key="source" ref="787785768"/>
491
						<reference key="destination" ref="963515567"/>
492
					</object>
493
					<int key="connectionID">130</int>
494
				</object>
495
				<object class="IBConnectionRecord">
496
					<object class="IBOutletConnection" key="connection">
497
						<string key="label">dataSource</string>
498
						<reference key="source" ref="787785768"/>
499
						<reference key="destination" ref="381152635"/>
500
					</object>
501
					<int key="connectionID">137</int>
502
				</object>
503
				<object class="IBConnectionRecord">
504
					<object class="IBOutletConnection" key="connection">
505
						<string key="label">delegate</string>
506
						<reference key="source" ref="678143084"/>
507
						<reference key="destination" ref="357233152"/>
508
					</object>
509
					<int key="connectionID">139</int>
510
				</object>
374
511
			</object>
375
512
			<object class="IBMutableOrderedSet" key="objectRecords">
376
513
				<object class="NSArray" key="orderedObjects">
422
559
						<reference key="object" ref="904413865"/>
423
560
						<object class="NSMutableArray" key="children">
424
561
							<bool key="EncodedWithXMLCoder">YES</bool>
562
							<reference ref="299841028"/>
425
563
							<reference ref="801512230"/>
426
							<reference ref="299841028"/>
427
564
						</object>
428
565
						<reference key="parent" ref="1002"/>
429
566
						<string key="objectName">File Tree View</string>
491
628
						<reference key="object" ref="787785768"/>
492
629
						<reference key="parent" ref="1002"/>
493
630
					</object>
631
					<object class="IBObjectRecord">
632
						<int key="objectID">110</int>
633
						<reference key="object" ref="678143084"/>
634
						<object class="NSMutableArray" key="children">
635
							<bool key="EncodedWithXMLCoder">YES</bool>
636
							<reference ref="1058107516"/>
637
							<reference ref="825861932"/>
638
							<reference ref="1058871911"/>
639
							<reference ref="32540513"/>
640
							<reference ref="861316845"/>
641
							<reference ref="963515567"/>
642
						</object>
643
						<reference key="parent" ref="1002"/>
644
						<string key="objectName">ContextualMenu</string>
645
					</object>
646
					<object class="IBObjectRecord">
647
						<int key="objectID">112</int>
648
						<reference key="object" ref="1058871911"/>
649
						<reference key="parent" ref="678143084"/>
650
					</object>
651
					<object class="IBObjectRecord">
652
						<int key="objectID">119</int>
653
						<reference key="object" ref="32540513"/>
654
						<reference key="parent" ref="678143084"/>
655
					</object>
656
					<object class="IBObjectRecord">
657
						<int key="objectID">124</int>
658
						<reference key="object" ref="825861932"/>
659
						<reference key="parent" ref="678143084"/>
660
					</object>
661
					<object class="IBObjectRecord">
662
						<int key="objectID">126</int>
663
						<reference key="object" ref="1058107516"/>
664
						<reference key="parent" ref="678143084"/>
665
					</object>
666
					<object class="IBObjectRecord">
667
						<int key="objectID">128</int>
668
						<reference key="object" ref="861316845"/>
669
						<reference key="parent" ref="678143084"/>
670
					</object>
671
					<object class="IBObjectRecord">
672
						<int key="objectID">129</int>
673
						<reference key="object" ref="963515567"/>
674
						<reference key="parent" ref="678143084"/>
675
					</object>
494
676
				</object>
495
677
			</object>
496
678
			<object class="NSMutableDictionary" key="flattenedProperties">
500
682
					<string>-1.IBPluginDependency</string>
501
683
					<string>-2.IBPluginDependency</string>
502
684
					<string>-3.IBPluginDependency</string>
685
					<string>110.IBEditorWindowLastContentRect</string>
686
					<string>110.IBPluginDependency</string>
687
					<string>110.ImportedFromIB2</string>
688
					<string>110.editorWindowContentRectSynchronizationRect</string>
689
					<string>112.IBPluginDependency</string>
690
					<string>112.ImportedFromIB2</string>
691
					<string>119.IBPluginDependency</string>
692
					<string>124.IBPluginDependency</string>
693
					<string>126.IBPluginDependency</string>
694
					<string>128.IBPluginDependency</string>
695
					<string>129.IBPluginDependency</string>
503
696
					<string>27.IBPluginDependency</string>
504
697
					<string>31.IBPluginDependency</string>
505
698
					<string>55.IBEditorWindowLastContentRect</string>
529
722
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
530
723
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
531
724
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
532
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
533
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
534
					<string>{{554, 263}, {307, 399}}</string>
535
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
725
					<string>{{310, 530}, {169, 103}}</string>
536
726
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
537
727
					<integer value="1" id="9"/>
728
					<string>{{482, 640}, {187, 133}}</string>
729
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
730
					<reference ref="9"/>
731
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
732
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
733
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
734
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
735
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
736
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
737
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
738
					<string>{{582, 558}, {307, 399}}</string>
739
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
740
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
741
					<reference ref="9"/>
538
742
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
539
743
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
540
744
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
574
778
				</object>
575
779
			</object>
576
780
			<nil key="sourceID"/>
577
			<int key="maxID">106</int>
781
			<int key="maxID">139</int>
578
782
		</object>
579
783
		<object class="IBClassDescriber" key="IBDocument.Classes">
580
784
			<object class="NSMutableArray" key="referencedPartialClassDescriptions">
611
815
					<string key="className">FileTreeController</string>
612
816
					<string key="superclassName">NSObject</string>
613
817
					<object class="NSMutableDictionary" key="actions">
614
						<string key="NS.key.0">addToPlaylist:</string>
615
						<string key="NS.object.0">id</string>
818
						<bool key="EncodedWithXMLCoder">YES</bool>
819
						<object class="NSMutableArray" key="dict.sortedKeys">
820
							<bool key="EncodedWithXMLCoder">YES</bool>
821
							<string>addToPlaylist:</string>
822
							<string>setAsPlaylist:</string>
823
							<string>setAsRoot:</string>
824
							<string>showEntryInFinder:</string>
825
						</object>
826
						<object class="NSMutableArray" key="dict.values">
827
							<bool key="EncodedWithXMLCoder">YES</bool>
828
							<string>id</string>
829
							<string>id</string>
830
							<string>id</string>
831
							<string>id</string>
832
						</object>
616
833
					</object>
617
834
					<object class="NSMutableDictionary" key="outlets">
618
835
						<bool key="EncodedWithXMLCoder">YES</bool>
619
836
						<object class="NSMutableArray" key="dict.sortedKeys">
620
837
							<bool key="EncodedWithXMLCoder">YES</bool>
621
838
							<string>controller</string>
839
							<string>dataSource</string>
622
840
							<string>outlineView</string>
623
841
						</object>
624
842
						<object class="NSMutableArray" key="dict.values">
625
843
							<bool key="EncodedWithXMLCoder">YES</bool>
626
844
							<string>SideViewController</string>
845
							<string>FileTreeDataSource</string>
627
846
							<string>NSOutlineView</string>
628
847
						</object>
629
848
					</object>
640
859
						<object class="NSMutableArray" key="dict.sortedKeys">
641
860
							<bool key="EncodedWithXMLCoder">YES</bool>
642
861
							<string>outlineView</string>
862
							<string>pathControl</string>
643
863
							<string>watcher</string>
644
864
						</object>
645
865
						<object class="NSMutableArray" key="dict.values">
646
866
							<bool key="EncodedWithXMLCoder">YES</bool>
647
867
							<string>NSOutlineView</string>
868
							<string>NSPathControl</string>
648
869
							<string>PathWatcher</string>
649
870
						</object>
650
871
					</object>
673
894
					<string key="className">FileTreeViewController</string>
674
895
					<string key="superclassName">SideViewController</string>
675
896
					<object class="NSMutableDictionary" key="outlets">
676
						<string key="NS.key.0">playlistLoader</string>
677
						<string key="NS.object.0">PlaylistLoader</string>
897
						<bool key="EncodedWithXMLCoder">YES</bool>
898
						<object class="NSMutableArray" key="dict.sortedKeys">
899
							<bool key="EncodedWithXMLCoder">YES</bool>
900
							<string>playbackController</string>
901
							<string>playlistLoader</string>
902
						</object>
903
						<object class="NSMutableArray" key="dict.values">
904
							<bool key="EncodedWithXMLCoder">YES</bool>
905
							<string>PlaybackController</string>
906
							<string>PlaylistLoader</string>
907
						</object>
678
908
					</object>
679
909
					<object class="IBClassDescriptionSource" key="sourceIdentifier">
680
910
						<string key="majorKey">IBProjectSource</string>
847
1077
				<object class="IBPartialClassDescription">
848
1078
					<string key="className">PlaylistLoader</string>
849
1079
					<string key="superclassName">NSObject</string>
1080
					<object class="NSMutableDictionary" key="actions">
1081
						<string key="NS.key.0">clear:</string>
1082
						<string key="NS.object.0">id</string>
1083
					</object>
850
1084
					<object class="NSMutableDictionary" key="outlets">
851
1085
						<string key="NS.key.0">playlistController</string>
852
1086
						<string key="NS.object.0">PlaylistController</string>

Up to file-list English.lproj/MainMenu.xib:

2
2
<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.03">
3
3
	<data>
4
4
		<int key="IBDocument.SystemTarget">1050</int>
5
		<string key="IBDocument.SystemVersion">9G55</string>
5
		<string key="IBDocument.SystemVersion">9J61</string>
6
6
		<string key="IBDocument.InterfaceBuilderVersion">677</string>
7
		<string key="IBDocument.AppKitVersion">949.43</string>
7
		<string key="IBDocument.AppKitVersion">949.46</string>
8
8
		<string key="IBDocument.HIToolboxVersion">353.00</string>
9
9
		<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
10
10
			<bool key="EncodedWithXMLCoder">YES</bool>
11
			<integer value="1063"/>
11
12
			<integer value="2439"/>
12
13
			<integer value="2234"/>
13
14
			<integer value="21"/>
14
			<integer value="1063"/>
15
15
		</object>
16
16
		<object class="NSArray" key="IBDocument.PluginDependencies">
17
17
			<bool key="EncodedWithXMLCoder">YES</bool>
@@ -891,44 +891,78 @@ ELIAAAAAAAgACAAIAAgAAQABAAEAAQ</bytes>
891
891
																			<reference ref="8"/>
892
892
																			<object class="NSCachedImageRep">
893
893
																				<object class="NSData" key="NSTIFFRepresentation">
894
																					<bytes key="NS.bytes">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
931
OQA</bytes>
894
																					<bytes key="NS.bytes">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
924
K54smy2VLpEvjDCGMYIyezN4NHA1bjZmN2I4WjlUOk47SDxDPT0+Oj80QDJBK0IoQyNEIUUdRhpHFUgP
925
SQpKAUr6S+5M5U3YTs1PwFC0UadSmFOMVH1VcFZiV1VYSVk9WjJbJlwdXRReDV8GYAFg+2H4YvVj9GTz
926
ZfNm9Gf1aPhp+Wr9a/9tA24GbwpwDXESchVzGnQedSF2JXcneCp5K3oseyx8LX0qfip/JYAjgR2CF4MP
927
hAeE/oXzhuqH34jWicuKwYu1jKqNn46Uj4mQfZFzkmaTW5RPlUOWOJcsmCGZFpoLmwCb9pzrneGe1p/N
928
oMOhuqKyo6mkoaWZppKnjKiGqYCqe6t3rHStcq5wr2+wbrFvsnCzc7R2tXu2gLeFuIu5kbqYu5+8p72v
929
vri/wcDLwdTC38PqxPXGAccOyBrJJ8o0y0PMUM1gzm7PftCO0Z7Sr9PA1NHV5Nb12AjZG9ov20LcV91q
930
3n/fk+Cp4b3i0+Po5P7mFOcr6EHpWepw64nsoe277tTv7/EK8iXzQvRf9Xz2m/e6+Nr5/Psd/EH9Zf6K
931
AAAAPgEbAk0C8wPTBLcFmAaXB30IhAllCloLSgw8DTUOJw8nEBgRGhIQExEUCRUHFgQXAhgCGP4aABr6
932
G/4c+B37HvQf8yDwIfEi8CPvJO4l6ibrJ+Uo5ingKuAr2izYLdQu0S/NMMkxxjLAM740uDW4NrA3rjin
933
OaM6njuaPJY9kj6QP4tAikGEQoNDf0R+RXxGfEd5SHZJc0puS2tMZU1iTllPU1BKUUJSOVMvVCZVG1YS
934
VwVX+ljsWeBa0lvEXLZdpl6ZX4dgeGFoYlljSmQ6ZSxmHGcPaABo8mnkatZryWy6ba5un2+ScIRxd3Jq
935
c1x0T3VBdjV3JngaeQx5/3rye+N8133Ifrt/rICfgZCCgoN0hGWFV4ZGhzeIJ4kXigeK9ovmjNSNxY6z
936
j6KQkZGBknGTX5RQlT+WMJcgmBGZA5n0muab2JzMnb+es5+ooJ2hlKKKo4Oke6V1pnCnbKhpqWeqZ6to
937
rGutb650r3ywhrGRsp6zrrS/tdG25rf8uRS6LbtIvGS9gr6hv8HA4sIFwyjETMVxxpfHvsjkygzLM8xc
938
zYTOrc/U0P3SJNNL1HLVmNa91+HZBdon20ncaN2I3qbfxeDj4gHjIOQ+5V3me+eZ6Lfp1erz7BDtLe5L
939
72fwhPGg8rzz1/Tz9g33KPhB+Vv6c/uN/KP9u/7R/+gAAAA+ARsCTQLzA9QEtwWZBpgHfgiFCWYKWwtL
940
DD0NNg4oDygQGhEcEhETEhQLFQgWBhcEGAQZABoDGv0cARz6Hf0e9x/2IPMh9CLzI/Ik8iXuJu4n6Sjq
941
KeMq4yveLNwt2C7VL9IwzTHKMsUzwzS9Nbw2tTezOKw5qDqjO588nD2XPpU/kECQQYpCiUOFRIVFg0aC
942
R4BIfEl6SnVLckxrTWdOXk9YUE9RR1I+UzRUK1UfVhdXCVf+WPBZ5VrXW8lcvF2sXqBfj2CBYXJiZWNY
943
ZEplP2YxZydoGWkOagJq92vsbOFt127Kb8FwtXGrcp9zlHSKdX12c3dleFp5TXpBezN8Jn0Yfgl+/H/q
944
gNuByYK5g6eElIWChm6HW4hFiTGKHIsFi/CM2Y3Ejq2Pl5CAkWqSVJM9lCeVEJX7luWXz5i7maaakpt+
945
nGudWZ5HnzagJaEWogii+qPupOOl2abQp8mow6nAqr2rvay+rcKuyK/RsNyx6rL6tA21IrY5t1K4bbmK
946
uqi7ybzrvg+/NcBcwYXCr8PaxQbGM8dgyI/JvsrtzB3NTc59z6vQ29IJ0zfUZNWQ1rvX5NkM2jLbWNx6
947
3Zzevd/e4P7iH+NA5GHlgeah58Ho4eoA6x/sPu1c7nrvl/C18dDy7fQH9SL2O/dV+Gz5hfqa+7H8xf3a
948
/uz//wAAbmRpbgAAAAAAAAMGAACjwAAAVIAAAEzAAACZgAAAJxcAABF7AABQQAAAVEAAAgQ3AAHtwgAB
949
5+oAAwB4AAIAAAADAA4AHwA2AFUAewCoANwBFwFaAaQB9gJQArIDHQOPBAoEjgUbBbEGUAb4B6oIZQkp
950
CfcKzwuwDJoNjQ6KD48QnhG5EuEUFxVYFqYYABllGtQcTB3NH1Ug5CJ6JBcluydnKRwq2SygLnAwSjIv
951
NCA2HjgpOkI8aj6jQO1DRkWrSB1KnE0nT79SY1UUV9Bal11pYEZjLWYeaRlsHG8ocjt1VXh1e5x+x4H3
952
hS6Ibou1jwSSWpW5mR+cjKACo3+nBKqRriWxwbVkuRC8w8B9xEHIDcviz7/TpNeR24TffuN+54Trj++e
953
87L3yfvj//8AAAADAA4AHwA2AFUAewCoANwBFwFaAaQB9gJQArIDHQOPBAoEjgUbBbEGUAb4B6oIZQkp
954
CfcKzwuwDJoNjQ6KD48QnRG3EtwUDBVJFpIX5xlIGrYcMR25H04g8CKcJFQmFifjKbsrni2NL4cxjTOf
955
Nbw35TobPF0+rEEHQ3BF6EhtSwBNoFBNUwZVy1ibW3VeWmFIZD5nPGpBbUtwWnNtdoJ5mXyvf8SC2IXs
956
iQCMFo8tkkeVY5iEm6ie0qIDpTqoeavBrxSycrXeuVe84MB6xCDH0MuJz0zTGtby2tXew+K95sPq1u72
957
8yP3Xfun//8AAAADAA4AHwA2AFUAewCoANwBFwFaAaQB9gJQArIDHQOPBAoEjgUbBbEGUAb4B6oIZQkp
958
CfcKzwuwDJoNjQ6KD48QnRG3EtwUDRVKFpMX6RlKGrkcMx27H08g7yKZJEwmCifTKaUrgy1sL2AxYDNt
959
NYc3rTniPCU+eEDaQ0xFzkhgSwJNslBwUztWFFj4W+he4mHlZPBoAmsabjZxVXR0d5R6sX3KgN2D7Ib5
960
igWNEZAckyiWNZlFnFifcKKNpbGo3qwUr1WyorX+uWq858B5xBfHwMtyzy/S9tbJ2qjek+KL5pHqpu7K
961
8v33QvuX//8AAGRlc2MAAAAAAAAAGjIyMDlXQSAxMC81NS8yLjIgMjAwOTA1MjUAAAAAAAAAABoAMgAy
962
ADAAOQBXAEEAIAAxADAALwA1ADUALwAyAC4AMgAgADIAMAAwADkAMAA1ADIANQAAAAAaMjIwOVdBIDEw
963
LzU1LzIuMiAyMDA5MDUyNQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHRl
964
eHQAAAAAQ29weXJpZ2h0IEFwcGxlIEluYy4sIDIwMDkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
965
AABtbW9kAAAAAAAAEKwAAPARMDg4TMYC6wAAAAAAAAAAAAAAAAAAAAAAA</bytes>
932
966
																				</object>
933
967
																				<string key="NSCacheWindowColorSpace">NSCalibratedRGBColorSpace</string>
934
968
																				<int key="NSCacheWindowBPS">8</int>
@@ -5887,6 +5921,14 @@ OQA</bytes>
5887
5921
					</object>
5888
5922
					<int key="connectionID">2451</int>
5889
5923
				</object>
5924
				<object class="IBConnectionRecord">
5925
					<object class="IBOutletConnection" key="connection">
5926
						<string key="label">playbackController</string>
5927
						<reference key="source" ref="366497202"/>
5928
						<reference key="destination" ref="936098491"/>
5929
					</object>
5930
					<int key="connectionID">2452</int>
5931
				</object>
5890
5932
			</object>
5891
5933
			<object class="IBMutableOrderedSet" key="objectRecords">
5892
5934
				<object class="NSArray" key="orderedObjects">
@@ -8516,7 +8558,7 @@ OQA</bytes>
8516
8558
					<reference ref="9"/>
8517
8559
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
8518
8560
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
8519
					<string>{{823, 609}, {142, 63}}</string>
8561
					<string>{{809, 609}, {142, 63}}</string>
8520
8562
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
8521
8563
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
8522
8564
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
@@ -8607,7 +8649,7 @@ OQA</bytes>
8607
8649
					<reference ref="9"/>
8608
8650
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
8609
8651
					<reference ref="9"/>
8610
					<string>{{524, 599}, {299, 293}}</string>
8652
					<string>{{524, 599}, {285, 293}}</string>
8611
8653
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
8612
8654
					<reference ref="9"/>
8613
8655
					<string>{{376, 543}, {299, 293}}</string>
@@ -8635,7 +8677,7 @@ OQA</bytes>
8635
8677
				</object>
8636
8678
			</object>
8637
8679
			<nil key="sourceID"/>
8638
			<int key="maxID">2451</int>
8680
			<int key="maxID">2452</int>
8639
8681
		</object>
8640
8682
		<object class="IBClassDescriber" key="IBDocument.Classes">
8641
8683
			<object class="NSMutableArray" key="referencedPartialClassDescriptions">
@@ -8841,8 +8883,17 @@ OQA</bytes>
8841
8883
					<string key="className">FileTreeViewController</string>
8842
8884
					<string key="superclassName">SideViewController</string>
8843
8885
					<object class="NSMutableDictionary" key="outlets">
8844
						<string key="NS.key.0">playlistLoader</string>
8845
						<string key="NS.object.0">PlaylistLoader</string>
8886
						<bool key="EncodedWithXMLCoder">YES</bool>
8887
						<object class="NSMutableArray" key="dict.sortedKeys">
8888
							<bool key="EncodedWithXMLCoder">YES</bool>
8889
							<string>playbackController</string>
8890
							<string>playlistLoader</string>
8891
						</object>
8892
						<object class="NSMutableArray" key="dict.values">
8893
							<bool key="EncodedWithXMLCoder">YES</bool>
8894
							<string>PlaybackController</string>
8895
							<string>PlaylistLoader</string>
8896
						</object>
8846
8897
					</object>
8847
8898
					<object class="IBClassDescriptionSource" key="sourceIdentifier">
8848
8899
						<string key="majorKey">IBProjectSource</string>

Up to file-list FileTree/DirectoryNode.m:

20
20
21
21
- (void)updatePath
22
22
{
23
	NSArray *contents = [[[NSFileManager defaultManager] directoryContentsAtPath:[url path]] sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];
23
	NSArray *contents = [[[NSFileManager defaultManager] directoryContentsAtPath:[url path]] sortedArrayUsingSelector:@selector(finderCompare:)];
24
24
	NSMutableArray *fullPaths = [[NSMutableArray alloc] init];
25
25
26
26
	for (NSString *s in contents)

Up to file-list FileTree/FileTreeController.h:

7
7
//
8
8
9
9
#import <Cocoa/Cocoa.h>
10
#import "FileTreeDataSource.h"
10
11
11
12
@class SideViewController;
12
13
@interface FileTreeController : NSObject {
13
14
	IBOutlet SideViewController *controller;
14
15
	IBOutlet NSOutlineView *outlineView;
16
	IBOutlet FileTreeDataSource *dataSource;
15
17
}
16
18
17
19
- (IBAction)addToPlaylist:(id)sender;
20
- (IBAction)setAsPlaylist:(id)sender;
21
- (IBAction)showEntryInFinder:(id)sender;
22
- (IBAction)setAsRoot:(id)sender;
18
23
19
24
@end

Up to file-list FileTree/FileTreeController.m:

28
28
	[urls release];
29
29
}
30
30
31
- (IBAction)setAsPlaylist:(id)sender
32
{
33
	[controller clear:sender];
34
	[self addToPlaylist:sender];
35
}
36
37
- (IBAction)playPauseResume:(NSObject *)id
38
{
39
	[controller playPauseResume:id];
40
}
41
42
- (IBAction)showEntryInFinder:(id)sender
43
{
44
	unsigned int index;
45
	NSWorkspace* ws = [NSWorkspace sharedWorkspace];
46
	NSIndexSet *selectedIndexes = [outlineView selectedRowIndexes];
47
	
48
	for (index = [selectedIndexes firstIndex];
49
		 index != NSNotFound; index = [selectedIndexes indexGreaterThanIndex: index])  
50
	{
51
		NSURL *url = [[outlineView itemAtRow:index] URL];
52
		[ws selectFile:[url path] inFileViewerRootedAtPath:[url path]];
53
	}
54
}
55
56
- (IBAction)setAsRoot:(id)sender
57
{
58
	unsigned int index = [[outlineView selectedRowIndexes] firstIndex];
59
	
60
	if (index != NSNotFound)
61
	{
62
		[dataSource changeURL:[[outlineView itemAtRow:index] URL]];
63
	}
64
}
31
65
32
66
@end

Up to file-list FileTree/FileTreeDataSource.h:

13
13
14
14
@interface FileTreeDataSource : NSObject {
15
15
	PathNode *rootNode;
16
16
	
17
	IBOutlet NSPathControl *pathControl;
17
18
	IBOutlet PathWatcher *watcher;
18
19
	IBOutlet NSOutlineView *outlineView;
19
20
}
20
21
21
22
- (NSURL *)rootURL;
22
23
- (void)setRootURL:(NSURL *)rootURL;
24
- (void)changeURL:(NSURL *)rootURL;
23
25
24
26
- (void)reloadPathNode:(PathNode *)item;
25
27

Up to file-list FileTree/FileTreeDataSource.m:

30
30
	
31
31
	[self setRootURL: [NSURL URLWithString:[[[NSUserDefaultsController sharedUserDefaultsController] defaults] objectForKey:@"fileTreeRootURL"]]]; 
32
32
33
	[pathControl setTarget:self];
34
    [pathControl setAction:@selector(pathControlAction:)];
33
35
}
34
36
35
37
- (void) observeValueForKeyPath:(NSString *)keyPath
37
39
						 change:(NSDictionary *)change
38
40
                        context:(void *)context
39
41
{
42
	NSLog([[[NSUserDefaultsController sharedUserDefaultsController] defaults] objectForKey:@"fileTreeRootURL"]);
40
43
	if ([keyPath isEqualToString:@"values.fileTreeRootURL"]) {
41
44
		[self setRootURL:[NSURL URLWithString:[[[NSUserDefaultsController sharedUserDefaultsController] defaults] objectForKey:@"fileTreeRootURL"]]];
42
45
	}
43
46
}
44
47
48
- (void)changeURL:(NSURL *)url
49
{
50
	if (url != nil)
51
	{
52
		[[[NSUserDefaultsController sharedUserDefaultsController] defaults] setObject:[url absoluteString] forKey:@"fileTreeRootURL"];
53
	}
54
}
55
56
- (void)pathControlAction:(id)sender
57
{
58
	if ([pathControl clickedPathComponentCell] != nil && [[pathControl clickedPathComponentCell] URL] != nil)
59
	{
60
		[self changeURL:[[pathControl clickedPathComponentCell] URL]];
61
	}
62
}
45
63
46
64
- (NSURL *)rootURL
47
65
{
131
149
- (BOOL)outlineView:(NSOutlineView *)outlineView writeItems:(NSArray*)items toPasteboard:(NSPasteboard*)pboard {
132
150
	//Get selected paths
133
151
	NSMutableArray *urls = [NSMutableArray arrayWithCapacity:[items count]];
152
	NSMutableArray *paths = [NSMutableArray arrayWithCapacity:[items count]];
134
153
135
154
	for (id p in items) {
136
155
		[urls addObject:[p URL]];
156
		[paths addObject:[[p URL] path]];
137
157
	}
138
	NSLog(@"URLS: %@", urls);
139
    [pboard declareTypes:[NSArray arrayWithObjects:CogUrlsPboardType,nil] owner:nil];	//add it to pboard
158
	NSLog(@"Paths: %@", paths);
159
	[pboard declareTypes:[NSArray arrayWithObjects:CogUrlsPboardType,nil] owner:nil];	//add it to pboard
140
160
	[pboard setData:[NSArchiver archivedDataWithRootObject:urls] forType:CogUrlsPboardType];
161
	[pboard addTypes:[NSArray arrayWithObject:NSFilenamesPboardType] owner:self];
162
	[pboard setPropertyList:paths forType:NSFilenamesPboardType];
141
163
142
164
    return YES;
143
165
}

Up to file-list FileTree/FileTreeOutlineView.m:

8
8
9
9
#import "FileTreeOutlineView.h"
10
10
#import "FileTreeViewController.h"
11
#import "PlaybackController.h"
11
12
12
13
@implementation FileTreeOutlineView
13
14
14
15
- (void)awakeFromNib
15
16
{
17
	[[self menu] setAutoenablesItems:NO];
16
18
	[self setDoubleAction:@selector(addToPlaylist:)];
17
19
	[self setTarget:[self delegate]];
18
20
}
33
35
34
36
			return;
35
37
		}
38
		else if (modifiers == 0 && c == ' ')
39
		{
40
			[[self delegate] playPauseResume:self];
41
			return;
42
		}
36
43
	}
37
44
	
38
45
	[super keyDown:e];
40
47
	return;
41
48
}
42
49
50
// enables right-click selection for "Show in Finder" contextual menu
51
-(NSMenu*)menuForEvent:(NSEvent*)event
52
{
53
	//Find which row is under the cursor
54
	[[self window] makeFirstResponder:self];
55
	BOOL isDir;
56
	NSPoint   menuPoint = [self convertPoint:[event locationInWindow] fromView:nil];
57
	NSInteger iRow = [self rowAtPoint:menuPoint];
58
	NSMenu* contextMenu = [self menu];
59
60
	/* Update the file tree selection before showing menu
61
	 Preserves the selection if the row under the mouse is selected (to allow for
62
	 multiple items to be selected), otherwise selects the row under the mouse */
63
	BOOL currentRowIsSelected = [[self selectedRowIndexes] containsIndex:iRow];
64
65
	if (iRow == -1)
66
	{
67
		[self deselectAll:self];		
68
	}
69
	else if (!currentRowIsSelected)
70
	{
71
		[self selectRow:iRow byExtendingSelection:NO];
72
	}
73
74
	if ([self numberOfSelectedRows] > 0)
75
	{
76
		[[contextMenu itemWithTag:1] setEnabled:YES];	// Add to Playlist
77
		[[contextMenu itemWithTag:2] setEnabled:YES];	// Set as Playlist
78
		[[contextMenu itemWithTag:3] setEnabled:YES];	// Show in Finder
79
		
80
		// Only let directories be Set as Root
81
		[[NSFileManager defaultManager] fileExistsAtPath:[[[self itemAtRow:iRow] URL] path] isDirectory:&isDir];
82
		[[contextMenu itemWithTag:4] setEnabled:(isDir? YES : NO)];
83
	}
84
	else
85
	{
86
		//No rows are selected, so the menu should be displayed with all items disabled
87
		int i;
88
		for (i=0;i<[contextMenu numberOfItems];i++) {
89
			[[contextMenu itemAtIndex:i] setEnabled:NO];
90
		}
91
	}
92
	 
93
	return contextMenu;
94
}
95
43
96
@end

Up to file-list FileTree/FileTreeViewController.h:

10
10
#import "SideViewController.h"
11
11
12
12
@class PlaylistLoader;
13
@class PlaybackController;
13
14
@interface FileTreeViewController : SideViewController {
14
15
	IBOutlet PlaylistLoader *playlistLoader;
16
	IBOutlet PlaybackController *playbackController;
15
17
}
16
18
17
19
@end

Up to file-list FileTree/FileTreeViewController.m:

16
16
	return [super initWithNibName:@"FileTree" bundle:[NSBundle mainBundle]];
17
17
}
18
18
19
20
19
- (void)addToPlaylist:(NSArray *)urls
21
20
{
22
21
	[playlistLoader willInsertURLs:urls origin:URLOriginExternal];
23
22
	[playlistLoader didInsertURLs:[playlistLoader addURLs:urls sort:YES] origin:URLOriginExternal];
24
23
}
25
24
25
- (void)clear:(id)sender
26
{
27
	[playlistLoader clear:sender];
28
}
29
30
- (void)playPauseResume:(NSObject *)id
31
{
32
	[playbackController playPauseResume:id];
33
}
26
34
27
35
@end

Up to file-list FileTree/PathNode.h:

33
33
- (void)setSubpaths:(NSArray *)s;
34
34
35
35
- (NSString *)display;
36
- (void)setDisplay:(NSString *)s;
37
36
38
- (NSImage *)icon;
37
39
38
40
- (BOOL)isLeaf;

Up to file-list FileTree/PathNode.m:

@@ -33,13 +33,13 @@ NSURL *resolveAliases(NSURL *url)
33
33
			
34
34
			if (resolvedUrl != NULL)
35
35
			{
36
				NSLog(@"Resolved...");
36
				//NSLog(@"Resolved...");
37
37
				return [(NSURL *)resolvedUrl autorelease];
38
38
			}
39
39
		}
40
40
	}
41
41
42
	NSLog(@"Not resolved");
42
	//NSLog(@"Not resolved");
43
43
	return url;
44
44
}
45
45
@@ -56,7 +56,6 @@ NSURL *resolveAliases(NSURL *url)
56
56
	return self;
57
57
}
58
58
59
60
59
- (void)setURL:(NSURL *)u
61
60
{
62
61
	[u retain];
@@ -66,7 +65,7 @@ NSURL *resolveAliases(NSURL *url)
66
65
	url = u;
67
66
68
67
	[display release];
69
	display = [[NSFileManager defaultManager] displayNameAtPath:[url path]];
68
	display = [[NSFileManager defaultManager] displayNameAtPath:[u path]];
70
69
	[display retain];
71
70
	
72
71
	[icon release];
@@ -99,12 +98,13 @@ NSURL *resolveAliases(NSURL *url)
99
98
		}
100
99
		
101
100
		NSURL *u = [NSURL fileURLWithPath:s];
101
		NSString *displayName = [[NSFileManager defaultManager] displayNameAtPath:[u path]];
102
102
		
103
103
		PathNode *newNode;
104
104
		
105
		NSLog(@"Before: %@", u);
105
		//NSLog(@"Before: %@", u);
106
106
		u = resolveAliases(u);
107
		NSLog(@"After: %@", u);
107
		//NSLog(@"After: %@", u);
108
108
109
109
		if ([[s pathExtension] caseInsensitiveCompare:@"savedSearch"] == NSOrderedSame)
110
110
		{
@@ -135,7 +135,8 @@ NSURL *resolveAliases(NSURL *url)
135
135
				newNode = [[FileNode alloc] initWithDataSource:dataSource url:u];
136
136
			}
137
137
		}
138
					
138
139
		[newNode setDisplay:displayName];
139
140
		[newSubpaths addObject:newNode];
140
141
141
142
		[newNode release];
@@ -169,6 +170,13 @@ NSURL *resolveAliases(NSURL *url)
169
170
	return YES;
170
171
}
171
172
173
- (void)setDisplay:(NSString *)s
174
{
175
	[display release];
176
	display = s;
177
	[display retain];
178
}
179
172
180
- (NSString *)display
173
181
{
174
182
	return display;

Up to file-list Playlist/PlaylistLoader.h:

@@ -24,6 +24,11 @@ typedef enum {
24
24
	NSOperationQueue *queue;
25
25
}
26
26
27
- (void)initDefaults;
28
29
// Clear playlist
30
- (void)clear:(id)sender;
31
27
32
// Load arrays of urls...
28
33
- (NSArray*)addURLs:(NSArray *)urls sort:(BOOL)sort;
29
34
- (NSArray*)addURL:(NSURL *)url;

Up to file-list Playlist/PlaylistLoader.m:

26
26
	self = [super init];
27
27
	if (self)
28
28
	{
29
		[self initDefaults];
30
		
29
31
		queue = [[NSOperationQueue alloc] init];
30
32
		[queue setMaxConcurrentOperationCount:1];
31
33
	}
33
35
	return self; 
34
36
}
35
37
38
- (void)initDefaults
39
{
40
	NSDictionary *defaultsDictionary = [NSDictionary dictionaryWithObjectsAndKeys:
41
										[NSNumber numberWithBool:YES], @"readCueSheetsInFolders",
42
										nil];
43
	
44
	[[NSUserDefaults standardUserDefaults] registerDefaults:defaultsDictionary];
45
}
46
36
47
- (void)dealloc
37
48
{
38
49
	[queue release];
151
162
		BOOL isDir;
152
163
		if ( [manager fileExistsAtPath:absoluteSubpath isDirectory:&isDir] && isDir == NO)
153
164
		{
154
			[urls addObject:[NSURL fileURLWithPath:absoluteSubpath]];
165
			if ([[absoluteSubpath pathExtension] caseInsensitiveCompare:@"cue"] != NSOrderedSame ||
166
				[[NSUserDefaults standardUserDefaults] boolForKey:@"readCueSheetsInFolders"])
167
			{
168
				[urls addObject:[NSURL fileURLWithPath:absoluteSubpath]];
169
			}
155
170
		}
156
171
	}
157
172
	
203
218
	NSArray *sortedURLs;
204
219
	if (sort == YES)
205
220
	{
206
		sortedURLs = [expandedURLs sortedArrayUsingSelector:@selector(compareTrackNumbers:)];
221
		sortedURLs = [expandedURLs sortedArrayUsingSelector:@selector(finderCompare:)];
222
//		sortedURLs = [expandedURLs sortedArrayUsingSelector:@selector(compareTrackNumbers:)];
207
223
	}
208
224
	else
209
225
	{
360
376
    }
361
377
}
362
378
379
- (void)clear:(id)sender
380
{
381
	[playlistController clear:sender];
382
}
383
363
384
- (NSArray*)addURLs:(NSArray *)urls sort:(BOOL)sort
364
385
{
365
386
	return [self insertURLs:urls atIndex:[[playlistController content] count] sort:sort];

Up to file-list Preferences/General/English.lproj/Preferences.xib:

1
1
<?xml version="1.0" encoding="UTF-8"?>
2
<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.02">
2
<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.03">
3
3
	<data>
4
4
		<int key="IBDocument.SystemTarget">1050</int>
5
		<string key="IBDocument.SystemVersion">9D34</string>
6
		<string key="IBDocument.InterfaceBuilderVersion">667</string>
7
		<string key="IBDocument.AppKitVersion">949.33</string>
8
		<string key="IBDocument.HIToolboxVersion">352.00</string>
5
		<string key="IBDocument.SystemVersion">9L30</string>
6
		<string key="IBDocument.InterfaceBuilderVersion">677</string>
7
		<string key="IBDocument.AppKitVersion">949.54</string>
8
		<string key="IBDocument.HIToolboxVersion">353.00</string>
9
9
		<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
10
10
			<bool key="EncodedWithXMLCoder">YES</bool>
11
			<integer value="231"/>
12
			<integer value="85"/>
13
			<integer value="43"/>
11
14
			<integer value="50"/>
12
			<integer value="11"/>
13
			<integer value="85"/>
14
			<integer value="231"/>
15
15
			<integer value="58"/>
16
16
		</object>
17
17
		<object class="NSArray" key="IBDocument.PluginDependencies">
18
18
			<bool key="EncodedWithXMLCoder">YES</bool>
19
19
			<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
20
20
		</object>
21
		<object class="NSMutableDictionary" key="IBDocument.Metadata">
22
			<bool key="EncodedWithXMLCoder">YES</bool>
23
			<object class="NSArray" key="dict.sortedKeys">
24
				<bool key="EncodedWithXMLCoder">YES</bool>
25
			</object>
26
			<object class="NSMutableArray" key="dict.values">
27
				<bool key="EncodedWithXMLCoder">YES</bool>
28
			</object>
29
		</object>
21
30
		<object class="NSMutableArray" key="IBDocument.RootObjects" id="87903802">
22
31
			<bool key="EncodedWithXMLCoder">YES</bool>
23
32
			<object class="NSCustomObject" id="810127627">
42
51
						<int key="NSvFlags">256</int>
43
52
						<string key="NSFrame">{{91, 70}, {82, 19}}</string>
44
53
						<reference key="NSSuperview" ref="935554649"/>
54
						<reference key="NSWindow"/>
45
55
						<bool key="NSEnabled">YES</bool>
46
56
						<object class="NSTextFieldCell" key="NSCell" id="832665762">
47
57
							<int key="NSCellFlags">-2075001280</int>
79
89
						<int key="NSvFlags">256</int>
80
90
						<string key="NSFrame">{{175, 62}, {64, 32}}</string>
81
91
						<reference key="NSSuperview" ref="935554649"/>
92
						<reference key="NSWindow"/>
82
93
						<bool key="NSEnabled">YES</bool>
83
94
						<object class="NSButtonCell" key="NSCell" id="779487521">
84
95
							<int key="NSCellFlags">67239424</int>
106
117
						<int key="NSvFlags">256</int>
107
118
						<string key="NSFrame">{{45, 72}, {39, 17}}</string>
108
119
						<reference key="NSSuperview" ref="935554649"/>
120
						<reference key="NSWindow"/>
109
121
						<bool key="NSEnabled">YES</bool>
110
122
						<object class="NSTextFieldCell" key="NSCell" id="419838430">
111
123
							<int key="NSCellFlags">67239424</int>
135
147
						<int key="NSvFlags">256</int>
136
148
						<string key="NSFrame">{{17, 47}, {69, 17}}</string>
137
149
						<reference key="NSSuperview" ref="935554649"/>
150
						<reference key="NSWindow"/>
138
151
						<bool key="NSEnabled">YES</bool>
139
152
						<object class="NSTextFieldCell" key="NSCell" id="491370947">
140
153
							<int key="NSCellFlags">67239424</int>
151
164
						<int key="NSvFlags">256</int>
152
165
						<string key="NSFrame">{{40, 22}, {44, 17}}</string>
153
166
						<reference key="NSSuperview" ref="935554649"/>
167
						<reference key="NSWindow"/>
154
168
						<bool key="NSEnabled">YES</bool>
155
169
						<object class="NSTextFieldCell" key="NSCell" id="682291687">
156
170
							<int key="NSCellFlags">67239424</int>
167
181
						<int key="NSvFlags">256</int>
168
182
						<string key="NSFrame">{{91, 45}, {82, 19}}</string>
169
183
						<reference key="NSSuperview" ref="935554649"/>
184
						<reference key="NSWindow"/>
170
185
						<bool key="NSEnabled">YES</bool>
171
186
						<object class="NSTextFieldCell" key="NSCell" id="1061974777">
172
187
							<int key="NSCellFlags">-2075001280</int>
184
199
						<int key="NSvFlags">256</int>
185
200
						<string key="NSFrame">{{91, 20}, {82, 19}}</string>
186
201
						<reference key="NSSuperview" ref="935554649"/>
202
						<reference key="NSWindow"/>
187
203
						<bool key="NSEnabled">YES</bool>
188
204
						<object class="NSTextFieldCell" key="NSCell" id="956769949">
189
205
							<int key="NSCellFlags">-2075001280</int>
201
217
						<int key="NSvFlags">256</int>
202
218
						<string key="NSFrame">{{175, 37}, {64, 32}}</string>
203
219
						<reference key="NSSuperview" ref="935554649"/>
220
						<reference key="NSWindow"/>
204
221
						<bool key="NSEnabled">YES</bool>
205
222
						<object class="NSButtonCell" key="NSCell" id="880711596">
206
223
							<int key="NSCellFlags">67239424</int>
224
241
						<int key="NSvFlags">256</int>
225
242
						<string key="NSFrame">{{175, 12}, {64, 32}}</string>
226
243
						<reference key="NSSuperview" ref="935554649"/>
244
						<reference key="NSWindow"/>
227
245
						<bool key="NSEnabled">YES</bool>
228
246
						<object class="NSButtonCell" key="NSCell" id="586533092">
229
247
							<int key="NSCellFlags">67239424</int>
245
263
				</object>
246
264
				<string key="NSFrameSize">{432, 109}</string>
247
265
				<reference key="NSSuperview"/>
266
				<reference key="NSWindow"/>
248
267
				<object class="NSMutableString" key="NSClassName">
249
268
					<characters key="NS.bytes">NSView</characters>
250
269
				</object>
251
270
				<string key="NSExtension">NSResponder</string>
252
271
			</object>
253
272
			<object class="NSCustomView" id="917028670">
254
				<nil key="NSNextResponder"/>
273
				<reference key="NSNextResponder"/>
255
274
				<int key="NSvFlags">256</int>
256
275
				<object class="NSMutableArray" key="NSSubviews">
257
276
					<bool key="EncodedWithXMLCoder">YES</bool>
306
325
					</object>
307
326
				</object>
308
327
				<string key="NSFrameSize">{432, 74}</string>
328
				<reference key="NSSuperview"/>
309
329
				<object class="NSMutableString" key="NSClassName">
310
330
					<characters key="NS.bytes">NSView</characters>
311
331
				</object>
441
461
				<string key="NSExtension">NSResponder</string>
442
462
			</object>
443
463
			<object class="NSUserDefaultsController" id="288214272">
464
				<object class="NSMutableArray" key="NSDeclaredKeys">
465
					<bool key="EncodedWithXMLCoder">YES</bool>
466
					<string>parseCueOnAdd</string>
467
					<string>readCueInDir</string>
468
					<string>readCueSheetsInFolders</string>
469
				</object>
444
470
				<bool key="NSSharedInstance">YES</bool>
445
471
			</object>
446
472
			<object class="NSCustomObject" id="732449007">
636
662
					<object class="NSPopUpButton" id="95183005">
637
663
						<reference key="NSNextResponder" ref="215894919"/>
638
664
						<int key="NSvFlags">268</int>
639
						<string key="NSFrame">{{157, 56}, {257, 26}}</string>
665
						<string key="NSFrame">{{157, 78}, {257, 26}}</string>
640
666
						<reference key="NSSuperview" ref="215894919"/>
641
667
						<bool key="NSEnabled">YES</bool>
642
668
						<object class="NSPopUpButtonCell" key="NSCell" id="695505990">
701
727
					<object class="NSPopUpButton" id="689681548">
702
728
						<reference key="NSNextResponder" ref="215894919"/>
703
729
						<int key="NSvFlags">268</int>
704
						<string key="NSFrame">{{157, 23}, {257, 26}}</string>
730
						<string key="NSFrame">{{157, 45}, {257, 26}}</string>
705
731
						<reference key="NSSuperview" ref="215894919"/>
706
732
						<bool key="NSEnabled">YES</bool>
707
733
						<object class="NSPopUpButtonCell" key="NSCell" id="801890855">
766
792
					<object class="NSTextField" id="293179602">
767
793
						<reference key="NSNextResponder" ref="215894919"/>
768
794
						<int key="NSvFlags">268</int>
769
						<string key="NSFrame">{{17, 63}, {129, 17}}</string>
795
						<string key="NSFrame">{{17, 85}, {129, 17}}</string>
770
796
						<reference key="NSSuperview" ref="215894919"/>
771
797
						<bool key="NSEnabled">YES</bool>
772
798
						<object class="NSTextFieldCell" key="NSCell" id="911161644">
782
808
					<object class="NSTextField" id="569588868">
783
809
						<reference key="NSNextResponder" ref="215894919"/>
784
810
						<int key="NSvFlags">268</int>
785
						<string key="NSFrame">{{17, 20}, {138, 35}}</string>
811
						<string key="NSFrame">{{17, 42}, {138, 35}}</string>
786
812
						<reference key="NSSuperview" ref="215894919"/>
787
813
						<bool key="NSEnabled">YES</bool>
788
814
						<object class="NSTextFieldCell" key="NSCell" id="897464142">
795
821
							<reference key="NSTextColor" ref="843311373"/>
796
822
						</object>
797
823
					</object>
824
					<object class="NSButton" id="806156422">
825
						<reference key="NSNextResponder" ref="215894919"/>
826
						<int key="NSvFlags">268</int>
827
						<string key="NSFrame">{{18, 18}, {395, 18}}</string>
828
						<reference key="NSSuperview" ref="215894919"/>
829
						<bool key="NSEnabled">YES</bool>
830
						<object class="NSButtonCell" key="NSCell" id="816544512">
831
							<int key="NSCellFlags">-2080244224</int>
832
							<int key="NSCellFlags2">0</int>
833
							<string key="NSContents">Read cue sheets when adding folders to playlist.</string>
834
							<reference key="NSSupport" ref="838963571"/>
835
							<reference key="NSControlView" ref="806156422"/>
836
							<int key="NSButtonFlags">1211912703</int>
837
							<int key="NSButtonFlags2">130</int>
838
							<reference key="NSNormalImage" ref="91049675"/>
839
							<reference key="NSAlternateImage" ref="892074019"/>
840
							<string key="NSAlternateContents"/>
841
							<string key="NSKeyEquivalent"/>
842
							<int key="NSPeriodicDelay">200</int>
843
							<int key="NSPeriodicInterval">25</int>
844
						</object>
845
					</object>
798
846
				</object>
799
				<string key="NSFrameSize">{431, 100}</string>
847
				<string key="NSFrameSize">{432, 122}</string>
800
848
				<reference key="NSSuperview"/>
801
849
				<string key="NSClassName">NSView</string>
802
850
			</object>
1349
1397
					</object>
1350
1398
					<int key="connectionID">309</int>
1351
1399
				</object>
1400
				<object class="IBConnectionRecord">
1401
					<object class="IBBindingConnection" key="connection">
1402
						<string key="label">value: values.readCueSheetsInFolders</string>
1403
						<reference key="source" ref="806156422"/>
1404
						<reference key="destination" ref="288214272"/>
1405
						<object class="NSNibBindingConnector" key="connector">
1406
							<reference key="NSSource" ref="806156422"/>
1407
							<reference key="NSDestination" ref="288214272"/>
1408
							<string key="NSLabel">value: values.readCueSheetsInFolders</string>
1409
							<string key="NSBinding">value</string>
1410
							<string key="NSKeyPath">values.readCueSheetsInFolders</string>
1411
							<int key="NSNibBindingConnectorVersion">2</int>
1412
						</object>
1413
					</object>
1414
					<int key="connectionID">328</int>
1415
				</object>
1352
1416
			</object>
1353
1417
			<object class="IBMutableOrderedSet" key="objectRecords">
1354
1418
				<object class="NSArray" key="orderedObjects">
1793
1857
							<reference ref="293179602"/>
1794
1858
							<reference ref="569588868"/>
1795
1859
							<reference ref="689681548"/>
1860
							<reference ref="806156422"/>
1796
1861
						</object>
1797
1862
						<reference key="parent" ref="293284525"/>
1798
1863
						<string key="objectName">PlaylistView</string>
1919
1984
						<reference key="object" ref="897464142"/>
1920
1985
						<reference key="parent" ref="569588868"/>
1921
1986
					</object>
1987
					<object class="IBObjectRecord">
1988
						<int key="objectID">310</int>
1989
						<reference key="object" ref="806156422"/>
1990
						<object class="NSMutableArray" key="children">
1991
							<bool key="EncodedWithXMLCoder">YES</bool>
1992
							<reference ref="816544512"/>
1993
						</object>
1994
						<reference key="parent" ref="215894919"/>
1995
					</object>
1996
					<object class="IBObjectRecord">
1997
						<int key="objectID">311</int>
1998
						<reference key="object" ref="816544512"/>
1999
						<reference key="parent" ref="806156422"/>
2000
					</object>
1922
2001
				</object>
1923
2002
			</object>
1924
2003
			<object class="NSMutableDictionary" key="flattenedProperties">
1953
2032
					<string>16.ImportedFromIB2</string>
1954
2033
					<string>17.IBPluginDependency</string>
1955
2034
					<string>17.ImportedFromIB2</string>
2035
					<string>196.IBPluginDependency</string>
2036
					<string>197.IBPluginDependency</string>
2037
					<string>198.IBPluginDependency</string>
2038
					<string>199.IBPluginDependency</string>
2039
					<string>200.IBPluginDependency</string>
2040
					<string>201.IBPluginDependency</string>
2041
					<string>202.IBPluginDependency</string>
2042
					<string>203.IBPluginDependency</string>
2043
					<string>204.IBPluginDependency</string>
2044
					<string>205.IBPluginDependency</string>
2045
					<string>206.IBPluginDependency</string>
2046
					<string>207.IBPluginDependency</string>
2047
					<string>208.IBPluginDependency</string>
2048
					<string>209.IBPluginDependency</string>
2049
					<string>210.IBPluginDependency</string>
2050
					<string>211.IBPluginDependency</string>
2051
					<string>212.IBPluginDependency</string>
2052
					<string>213.IBPluginDependency</string>
1956
2053
					<string>231.IBEditorWindowLastContentRect</string>
1957
2054
					<string>231.IBPluginDependency</string>
1958
2055
					<string>231.editorWindowContentRectSynchronizationRect</string>
1993
2090
					<string>29.ImportedFromIB2</string>
1994
2091
					<string>30.IBPluginDependency</string>
1995
2092
					<string>30.ImportedFromIB2</string>
2093
					<string>310.IBPluginDependency</string>
2094
					<string>311.IBPluginDependency</string>
2095
					<string>43.IBEditorWindowLastContentRect</string>
1996
2096
					<string>43.IBPluginDependency</string>
1997
2097
					<string>43.ImportedFromIB2</string>
1998
2098
					<string>44.IBPluginDependency</string>
2069
2169
					<reference ref="9"/>
2070
2170
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
2071
2171
					<reference ref="9"/>
2072
					<string>{{449, 587}, {431, 100}}</string>
2172
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
2173
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
2174
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
2175
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
2176
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
2177
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
2178
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
2179
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
2180
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
2181
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
2182
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
2183
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
2184
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
2185
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
2186
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
2187
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
2188
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
2189
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
2190
					<string>{{488, 692}, {432, 122}}</string>
2073
2191
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
2074
2192
					<string>{{376, 821}, {431, 100}}</string>
2075
2193
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
2110
2228
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
2111
2229
					<reference ref="9"/>
2112
2230
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
2231
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
2232
					<string>{{468, 859}, {432, 74}}</string>
2233
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
2113
2234
					<reference ref="9"/>
2114
2235
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
2115
2236
					<reference ref="9"/>
2176
2297
				</object>
2177
2298
			</object>
2178
2299
			<nil key="sourceID"/>
2179
			<int key="maxID">309</int>
2300
			<int key="maxID">328</int>
2180
2301
		</object>
2181
2302
		<object class="IBClassDescriber" key="IBDocument.Classes">
2182
2303
			<object class="NSMutableArray" key="referencedPartialClassDescriptions">
2222
2343
					</object>
2223
2344
				</object>
2224
2345
				<object class="IBPartialClassDescription">
2346
					<string key="className">GeneralPreferencePane</string>
2347
					<string key="superclassName">NSObject</string>
2348
					<object class="NSMutableDictionary" key="outlets">
2349
						<string key="NS.key.0">view</string>
2350
						<string key="NS.object.0">NSView</string>
2351
					</object>
2352
					<object class="IBClassDescriptionSource" key="sourceIdentifier">
2353
						<string key="majorKey">IBProjectSource</string>
2354
						<string key="minorKey">GeneralPreferencePane.h</string>
2355
					</object>
2356
				</object>
2357
				<object class="IBPartialClassDescription">
2225
2358
					<string key="className">HotKeyControl</string>
2226
2359
					<string key="superclassName">NDHotKeyControl</string>
2227
2360
					<object class="IBClassDescriptionSource" key="sourceIdentifier">
2239
2372
				</object>
2240
2373
				<object class="IBPartialClassDescription">
2241
2374
					<string key="className">HotKeyPane</string>
2242
					<string key="superclassName">PreferencePane</string>
2375
					<string key="superclassName">GeneralPreferencePane</string>
2243
2376
					<object class="NSMutableDictionary" key="actions">
2244
2377
						<bool key="EncodedWithXMLCoder">YES</bool>
2245
2378
						<object class="NSMutableArray" key="dict.sortedKeys">
2279
2412
				</object>
2280
2413
				<object class="IBPartialClassDescription">
2281
2414
					<string key="className">HotKeyPane</string>
2282
					<string key="superclassName">PreferencePane</string>
2415
					<string key="superclassName">GeneralPreferencePane</string>
2283
2416
					<object class="IBClassDescriptionSource" key="sourceIdentifier">
2284
2417
						<string key="majorKey">IBUserSource</string>
2285
2418
						<string key="minorKey"/>
2302
2435
					</object>
2303
2436
				</object>
2304
2437
				<object class="IBPartialClassDescription">
2438
					<string key="className">NSButton</string>
2439
					<object class="IBClassDescriptionSource" key="sourceIdentifier">
2440
						<string key="majorKey">IBUserSource</string>
2441
						<string key="minorKey"/>
2442
					</object>
2443
				</object>
2444
				<object class="IBPartialClassDescription">
2305
2445
					<string key="className">NSObject</string>
2306
2446
					<object class="IBClassDescriptionSource" key="sourceIdentifier">
2307
2447
						<string key="majorKey">IBProjectSource</string>
2317
2457
				</object>
2318
2458
				<object class="IBPartialClassDescription">
2319
2459
					<string key="className">OutputPane</string>
2320
					<string key="superclassName">PreferencePane</string>
2460
					<string key="superclassName">GeneralPreferencePane</string>
2321
2461
					<object class="NSMutableDictionary" key="actions">
2322
2462
						<string key="NS.key.0">takeDeviceID:</string>
2323
2463
						<string key="NS.object.0">id</string>
2333
2473
				</object>
2334
2474
				<object class="IBPartialClassDescription">
2335
2475
					<string key="className">OutputPane</string>
2336
					<string key="superclassName">PreferencePane</string>
2476
					<string key="superclassName">GeneralPreferencePane</string>
2337
2477
					<object class="IBClassDescriptionSource" key="sourceIdentifier">
2338
2478
						<string key="majorKey">IBUserSource</string>
2339
2479
						<string key="minorKey"/>
2367
2507
					<string key="className">PrefPaneController</string>
2368
2508
					<string key="superclassName">NSObject</string>
2369
2509
					<object class="NSMutableDictionary" key="outlets">
2370
						<bool key="EncodedWithXMLCoder">YES</bool>
2371
						<object class="NSMutableArray" key="dict.sortedKeys">
2372
							<bool key="EncodedWithXMLCoder">YES</bool>
2373
							<string>hotKeyPane</string>
2374
							<string>outputPane</string>
2375
							<string>playlistView</string>
2376
							<string>remoteView</string>
2377
							<string>scrobblerView</string>
2378
							<string>updatesView</string>
2379
						</object>
2380
						<object class="NSMutableArray" key="dict.values">
2381
							<bool key="EncodedWithXMLCoder">YES</bool>
2382
							<string>HotKeyPane</string>
2383
							<string>OutputPane</string>
2384
							<string>NSView</string>
2385
							<string>NSView</string>
2386
							<string>NSView</string>
2387
							<string>NSView</string>
2388
						</object>
2389
					</object>
2390
					<object class="IBClassDescriptionSource" key="sourceIdentifier">
2391
						<string key="majorKey">IBProjectSource</string>
2392
						<string key="minorKey">PrefPaneController.h</string>
2393
					</object>
2394
				</object>
2395
				<object class="IBPartialClassDescription">
2396
					<string key="className">PrefPaneController</string>
2397
					<string key="superclassName">NSObject</string>
2398
					<object class="NSMutableDictionary" key="outlets">
2399
2510
						<string key="NS.key.0">fileDrawerPane</string>
2400
2511
						<string key="NS.object.0">FileDrawerPane</string>
2401
2512
					</object>
2407
2518
				<object class="IBPartialClassDescription">
2408
2519
					<string key="className">PreferencePane</string>
2409
2520
					<string key="superclassName">NSObject</string>
2410
					<object class="NSMutableDictionary" key="outlets">
2411
						<string key="NS.key.0">view</string>
2412
						<string key="NS.object.0">NSView</string>
2413
					</object>
2414
					<object class="IBClassDescriptionSource" key="sourceIdentifier">
2415
						<string key="majorKey">IBProjectSource</string>
2416
						<string key="minorKey">PreferencePane.h</string>
2417
					</object>
2418
				</object>
2419
				<object class="IBPartialClassDescription">
2420
					<string key="className">PreferencePane</string>
2421
					<string key="superclassName">NSObject</string>
2422
2521
					<object class="IBClassDescriptionSource" key="sourceIdentifier">
2423
2522
						<string key="majorKey">IBUserSource</string>
2424
2523
						<string key="minorKey"/>

Up to file-list Utils/NSString+FinderCompare.h:

1
/*
2
 *  NSString+FinderCompare.h
3
 */
4
5
#import <Cocoa/Cocoa.h>
6
#include <CoreServices/CoreServices.h>
7
8
@interface NSString (FinderCompare)
9
10
- (NSComparisonResult)finderCompare:(NSString *)aString;
11
12
@end
13
14
@interface NSURL (FinderCompare)
15
16
- (NSComparisonResult)finderCompare:(NSURL *)aURL;
17
18
@end

Up to file-list Utils/NSString+FinderCompare.m:

1
//
2
//  FinderCompare.m
3
//  Created by Pablo Gomez Basanta on 23/7/05.
4
//  From: http://neop.gbtopia.com/?p=27
5
//
6
//  Based on:
7
//  http://developer.apple.com/qa/qa2004/qa1159.html
8
//
9
10
#import "NSString+FinderCompare.h"
11
12
13
14
@implementation NSString (FinderCompare)
15
16
- (NSComparisonResult)finderCompare:(NSString *)aString
17
{
18
	SInt32 compareResult;
19
	
20
	CFIndex lhsLen = [self length];;
21
    CFIndex rhsLen = [aString length];
22
	
23
	UniChar *lhsBuf = malloc(lhsLen * sizeof(UniChar));
24
	UniChar *rhsBuf = malloc(rhsLen * sizeof(UniChar));
25
	
26
	[self getCharacters:lhsBuf];
27
	[aString getCharacters:rhsBuf];
28
	
29
	(void) UCCompareTextDefault(kUCCollateComposeInsensitiveMask | kUCCollateWidthInsensitiveMask | kUCCollateCaseInsensitiveMask | kUCCollateDigitsOverrideMask | kUCCollateDigitsAsNumberMask| kUCCollatePunctuationSignificantMask,lhsBuf,lhsLen,rhsBuf,rhsLen,NULL,&compareResult);
30
	
31
	free(lhsBuf);
32
	free(rhsBuf);
33
	
34
	return (CFComparisonResult) compareResult;
35
}
36
37
@end
38
39
@implementation NSURL (FinderCompare)
40
41
- (NSComparisonResult)finderCompare:(NSURL *)aURL
42
{
43
	return [[self absoluteString] finderCompare:[aURL absoluteString]];
44
}
45
46
@end