Commits

Anonymous committed 0a5575b

Add a Download button to download the update

Comments (0)

Files changed (15)

CheckAppUpdateOperation.m

 		NSURL *releaseNotesURL = [updateItem releaseNotesURL];
 		if (releaseNotesURL)
 			[userInfo setObject:releaseNotesURL forKey:@"releaseNotesURL"];
+		NSURL *fileURL = [updateItem fileURL];
+		if (fileURL)
+			[userInfo setObject:fileURL forKey:@"fileURL"];
 		NSString *itemDescription = [updateItem itemDescription];
 		if (itemDescription)
 			[userInfo setObject:itemDescription forKey:@"itemDescription"];

Coruscation-Info.plist

 	<key>CFBundleSignature</key>
 	<string>????</string>
 	<key>CFBundleVersion</key>
-	<string>14</string>
+	<string>15</string>
 	<key>LSMinimumSystemVersion</key>
 	<string>${MACOSX_DEPLOYMENT_TARGET}</string>
 	<key>NSMainNibFile</key>

Coruscation.xcodeproj/karl.pbxuser

 					PBXFileDataSource_Warnings_ColumnID,
 				);
 			};
-			PBXPerProjectTemplateStateSaveDate = 292260913;
-			PBXWorkspaceStateSaveDate = 292260913;
+			PBXPerProjectTemplateStateSaveDate = 292511271;
+			PBXWorkspaceStateSaveDate = 292511271;
 		};
 		perUserProjectItems = {
-			CB94538E116B8CE40019D7DB /* PBXTextBookmark */ = CB94538E116B8CE40019D7DB /* PBXTextBookmark */;
-			CB94538F116B8CE40019D7DB /* PBXTextBookmark */ = CB94538F116B8CE40019D7DB /* PBXTextBookmark */;
+			CBAC69C1116F6131009C7A27 /* PBXTextBookmark */ = CBAC69C1116F6131009C7A27 /* PBXTextBookmark */;
+			CBAC69C2116F6131009C7A27 /* PBXTextBookmark */ = CBAC69C2116F6131009C7A27 /* PBXTextBookmark */;
 		};
 		sourceControlManager = CB32A9101088C65D00343471 /* Source Control */;
 		userBuildSettings = {
 					chosenTableWidths = (
 						103.000000,
 						22.000000,
-						142.080078,
+						143.080078,
 					);
 				};
 				UIContextForLayoutManager = {
 						isCollapsed = yes;
 						sizes = (
 							"{{0, 0}, {1355, 220}}",
-							"{{0, 225}, {1355, 777}}",
+							"{{0, 225}, {1355, 471}}",
 						);
 					};
 					tableSplitGeometry = {
 						_percentageOfCollapsedView = 0;
 						isCollapsed = yes;
 						sizes = (
-							"{{0, 0}, {292, 218}}",
-							"{{297, 0}, {586, 218}}",
+							"{{0, 0}, {293, 220}}",
+							"{{298, 0}, {587, 220}}",
 						);
 					};
 				};
 					chosenTableWidthsPT = (
 						128.000000,
 						108.110840,
-						323.570801,
+						324.570801,
 					);
 					chosenTableWidthsRT = (
 						128.000000,
 					);
 				};
 				"xdesign model browser state key - shown/hidden" = 1;
-				"xdesign model diagram view visible rect key" = "{{-346, -165}, {1340, 762}}";
+				"xdesign model diagram view visible rect key" = "{{0, 0}, {1340, 456}}";
 			};
 			sepNavWindowFrame = "{{82, 615}, {750, 558}}";
 		};
 	77C8280B06725ACE000B614F /* CoruscationDelegate.h */ = {
 		uiCtxt = {
 			sepNavIntBoundsRect = "{{0, 0}, {1296, 696}}";
-			sepNavSelRange = "{583, 0}";
-			sepNavVisRange = "{0, 1105}";
+			sepNavSelRange = "{634, 0}";
+			sepNavVisRange = "{0, 1156}";
 		};
 	};
 	77C8280C06725ACE000B614F /* CoruscationDelegate.m */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {1640, 3515}}";
-			sepNavSelRange = "{3328, 0}";
-			sepNavVisRange = "{3267, 362}";
+			sepNavIntBoundsRect = "{{0, 0}, {1296, 3838}}";
+			sepNavSelRange = "{4701, 0}";
+			sepNavVisRange = "{3751, 1711}";
 		};
 	};
 	8D1107260486CEB800E47090 /* Coruscation */ = {
 			sepNavVisRange = "{1423, 478}";
 		};
 	};
-	CB94538E116B8CE40019D7DB /* PBXTextBookmark */ = {
-		isa = PBXTextBookmark;
-		fRef = 77C8280C06725ACE000B614F /* CoruscationDelegate.m */;
-		name = "CoruscationDelegate.m: 97";
-		rLen = 0;
-		rLoc = 3275;
-		rType = 0;
-		vrLen = 1660;
-		vrLoc = 3148;
-	};
-	CB94538F116B8CE40019D7DB /* PBXTextBookmark */ = {
-		isa = PBXTextBookmark;
-		fRef = 77C8280C06725ACE000B614F /* CoruscationDelegate.m */;
-		name = "CoruscationDelegate.m: 104";
-		rLen = 0;
-		rLoc = 3475;
-		rType = 0;
-		vrLen = 1660;
-		vrLoc = 3148;
-	};
 	CBA28A2710C9751F005BCEC1 /* License.txt */ = {
 		uiCtxt = {
 			sepNavIntBoundsRect = "{{0, 0}, {1208, 972}}";
 			sepNavWindowFrame = "{{82, 615}, {750, 558}}";
 		};
 	};
+	CBAC69C1116F6131009C7A27 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 77C8280C06725ACE000B614F /* CoruscationDelegate.m */;
+		name = "CoruscationDelegate.m: 137";
+		rLen = 0;
+		rLoc = 4701;
+		rType = 0;
+		vrLen = 1711;
+		vrLoc = 3751;
+	};
+	CBAC69C2116F6131009C7A27 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 77C8280C06725ACE000B614F /* CoruscationDelegate.m */;
+		name = "CoruscationDelegate.m: 137";
+		rLen = 0;
+		rLoc = 4701;
+		rType = 0;
+		vrLen = 1711;
+		vrLoc = 3751;
+	};
 	CBB611EB10D1C484003BC3D3 /* PreferencesController.h */ = {
 		uiCtxt = {
 			sepNavIntBoundsRect = "{{0, 0}, {1208, 972}}";
 	};
 	CBB7FC57108D2575003E062A /* CheckAppUpdateOperation.m */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {1296, 2166}}";
-			sepNavSelRange = "{2221, 0}";
-			sepNavVisRange = "{1690, 1796}";
+			sepNavIntBoundsRect = "{{0, 0}, {1296, 2223}}";
+			sepNavSelRange = "{2862, 15}";
+			sepNavVisRange = "{1604, 1685}";
 		};
 	};
 	CBF233B6108D629600D2A5FF /* CollectionItemView.h */ = {
 	CBFE71AB10C17BE5007DF3BB /* appcast.xml */ = {
 		uiCtxt = {
 			sepNavIntBoundsRect = "{{0, 0}, {1296, 1001}}";
-			sepNavSelRange = "{726, 0}";
+			sepNavSelRange = "{428, 0}";
 			sepNavVisRange = "{0, 825}";
 		};
 	};
 	CBFE71AC10C17BE5007DF3BB /* relnotes.html */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {1296, 1064}}";
-			sepNavSelRange = "{809, 0}";
-			sepNavVisRange = "{0, 1913}";
+			sepNavIntBoundsRect = "{{0, 0}, {1296, 1121}}";
+			sepNavSelRange = "{988, 0}";
+			sepNavVisRange = "{313, 1712}";
 		};
 	};
 }

Coruscation.xcodeproj/karl.perspectivev3

 			<key>Layout</key>
 			<array>
 				<dict>
+					<key>BecomeActive</key>
+					<true/>
 					<key>ContentConfiguration</key>
 					<dict>
 						<key>PBXBottomSmartGroupGIDs</key>
 							<real>22</real>
 						</array>
 						<key>RubberWindowFrame</key>
-						<string>76 99 1701 1064 0 0 1920 1178 </string>
+						<string>76 100 1701 1064 0 0 1920 1178 </string>
 					</dict>
 					<key>Module</key>
 					<string>PBXSmartGroupTreeModule</string>
 					<key>Dock</key>
 					<array>
 						<dict>
-							<key>BecomeActive</key>
-							<true/>
 							<key>ContentConfiguration</key>
 							<dict>
 								<key>PBXProjectModuleGUID</key>
 										<key>_historyCapacity</key>
 										<integer>0</integer>
 										<key>bookmark</key>
-										<string>CB94538F116B8CE40019D7DB</string>
+										<string>CBAC69C2116F6131009C7A27</string>
 										<key>history</key>
 										<array>
-											<string>CB94538E116B8CE40019D7DB</string>
+											<string>CBAC69C1116F6131009C7A27</string>
 										</array>
 									</dict>
 									<key>SplitCount</key>
 								<key>Frame</key>
 								<string>{{0, 0}, {1357, 1018}}</string>
 								<key>RubberWindowFrame</key>
-								<string>76 99 1701 1064 0 0 1920 1178 </string>
+								<string>76 100 1701 1064 0 0 1920 1178 </string>
 							</dict>
 							<key>Module</key>
 							<string>PBXNavigatorGroup</string>
 									<dict>
 										<key>Frame</key>
 										<string>{{10, 27}, {1357, -27}}</string>
-										<key>RubberWindowFrame</key>
-										<string>76 99 1701 1064 0 0 1920 1178 </string>
 									</dict>
 									<key>Module</key>
 									<string>XCDetailModule</string>
 									<key>GeometryConfiguration</key>
 									<dict>
 										<key>Frame</key>
-										<string>{{0, 0}, {614, 336}}</string>
+										<string>{{10, 27}, {1357, -27}}</string>
 									</dict>
 									<key>Module</key>
 									<string>PBXProjectFindModule</string>
 									<key>GeometryConfiguration</key>
 									<dict>
 										<key>Frame</key>
-										<string>{{0, 0}, {568, 405}}</string>
+										<string>{{10, 27}, {1357, -27}}</string>
+										<key>RubberWindowFrame</key>
+										<string>76 100 1701 1064 0 0 1920 1178 </string>
 									</dict>
 									<key>Module</key>
 									<string>PBXBuildResultsModule</string>
 			</array>
 			<key>TableOfContents</key>
 			<array>
-				<string>CB945377116B8C350019D7DB</string>
+				<string>CBAC6970116F5E2F009C7A27</string>
 				<string>1CA23ED40692098700951B8B</string>
-				<string>CB945378116B8C350019D7DB</string>
+				<string>CBAC6971116F5E2F009C7A27</string>
 				<string>CB3742AB106A5CEF00AED801</string>
-				<string>CB945379116B8C350019D7DB</string>
+				<string>CBAC6972116F5E2F009C7A27</string>
 				<string>1CA23EDF0692099D00951B8B</string>
 				<string>1CA23EE00692099D00951B8B</string>
 				<string>1CA23EE10692099D00951B8B</string>
 			</array>
 			<key>TableOfContents</key>
 			<array>
-				<string>CB945382116B8C6C0019D7DB</string>
+				<string>CBAC699B116F5F8A009C7A27</string>
 				<string>1CCC7628064C1048000F2A68</string>
 				<string>1CCC7629064C1048000F2A68</string>
-				<string>CB945383116B8C6C0019D7DB</string>
-				<string>CB945384116B8C6C0019D7DB</string>
-				<string>CB945385116B8C6C0019D7DB</string>
-				<string>CB945386116B8C6C0019D7DB</string>
+				<string>CBAC699C116F5F8A009C7A27</string>
+				<string>CBAC699D116F5F8A009C7A27</string>
+				<string>CBAC699E116F5F8A009C7A27</string>
+				<string>CBAC699F116F5F8A009C7A27</string>
 				<string>CB3742AB106A5CEF00AED801</string>
 			</array>
 			<key>ToolbarConfigUserDefaultsMinorVersion</key>
 	<key>StatusbarIsVisible</key>
 	<true/>
 	<key>TimeStamp</key>
-	<real>292261092.97806501</real>
+	<real>292512049.39279503</real>
 	<key>ToolbarConfigUserDefaultsMinorVersion</key>
 	<string>2</string>
 	<key>ToolbarDisplayMode</key>
 	<integer>5</integer>
 	<key>WindowOrderList</key>
 	<array>
-		<string>CB945388116B8C6C0019D7DB</string>
-		<string>CB945389116B8C6C0019D7DB</string>
+		<string>CBAC69A1116F5F8A009C7A27</string>
+		<string>CBAC69A2116F5F8A009C7A27</string>
 		<string>/Users/karl/Desktop/coruscation/Coruscation.xcodeproj</string>
 	</array>
 	<key>WindowString</key>
-	<string>76 99 1701 1064 0 0 1920 1178 </string>
+	<string>76 100 1701 1064 0 0 1920 1178 </string>
 	<key>WindowToolsV3</key>
 	<array>
 		<dict>

Coruscation.xcodeproj/project.pbxproj

 		CB709522108B98190008D104 /* Sparkle.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CB7094C9108B95DE0008D104 /* Sparkle.framework */; };
 		CBA648A3108EB12A00667F15 /* Sparkle.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = CB7094C9108B95DE0008D104 /* Sparkle.framework */; };
 		CBA648D6108EB22000667F15 /* Credits.html in Resources */ = {isa = PBXBuildFile; fileRef = CBA648D5108EB22000667F15 /* Credits.html */; };
-		CBAD255B115ECF8D0093C261 /* SparkleBundle.m in Sources */ = {isa = PBXBuildFile; fileRef = CBAD255A115ECF8D0093C261 /* SparkleBundle.m */; };
-		CBAD255E115ECF8E0093C261 /* _SparkleBundle.m in Sources */ = {isa = PBXBuildFile; fileRef = CBAD255D115ECF8E0093C261 /* _SparkleBundle.m */; };
+		CBAC6989116F5E92009C7A27 /* SparkleBundle.m in Sources */ = {isa = PBXBuildFile; fileRef = CBAC6988116F5E92009C7A27 /* SparkleBundle.m */; };
+		CBAC698C116F5E93009C7A27 /* _SparkleBundle.m in Sources */ = {isa = PBXBuildFile; fileRef = CBAC698B116F5E93009C7A27 /* _SparkleBundle.m */; };
 		CBB611FF10D1C4FD003BC3D3 /* Preferences.xib in Resources */ = {isa = PBXBuildFile; fileRef = CBB611FD10D1C4FD003BC3D3 /* Preferences.xib */; };
 		CBB6122010D1C622003BC3D3 /* PreferencesController.m in Sources */ = {isa = PBXBuildFile; fileRef = CBB611EC10D1C484003BC3D3 /* PreferencesController.m */; };
 		CBB7E3AC10C49C4500094536 /* RevealTemplate.pdf in Resources */ = {isa = PBXBuildFile; fileRef = CBB7E3AB10C49C4500094536 /* RevealTemplate.pdf */; };
 		CB7094C1108B95DE0008D104 /* Sparkle.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = Sparkle.xcodeproj; path = ../Sparkle/Sparkle.xcodeproj; sourceTree = SOURCE_ROOT; };
 		CBA28A2710C9751F005BCEC1 /* License.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = License.txt; sourceTree = "<group>"; };
 		CBA648D5108EB22000667F15 /* Credits.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = Credits.html; sourceTree = "<group>"; };
-		CBAD255A115ECF8D0093C261 /* SparkleBundle.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SparkleBundle.m; sourceTree = "<group>"; };
-		CBAD255C115ECF8D0093C261 /* SparkleBundle.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SparkleBundle.h; sourceTree = "<group>"; };
-		CBAD255D115ECF8E0093C261 /* _SparkleBundle.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = _SparkleBundle.m; sourceTree = "<group>"; };
-		CBAD255F115ECF8E0093C261 /* _SparkleBundle.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = _SparkleBundle.h; sourceTree = "<group>"; };
+		CBAC6988116F5E92009C7A27 /* SparkleBundle.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SparkleBundle.m; sourceTree = "<group>"; };
+		CBAC698A116F5E93009C7A27 /* SparkleBundle.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SparkleBundle.h; sourceTree = "<group>"; };
+		CBAC698B116F5E93009C7A27 /* _SparkleBundle.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = _SparkleBundle.m; sourceTree = "<group>"; };
+		CBAC698D116F5E93009C7A27 /* _SparkleBundle.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = _SparkleBundle.h; sourceTree = "<group>"; };
 		CBB611EB10D1C484003BC3D3 /* PreferencesController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PreferencesController.h; sourceTree = "<group>"; };
 		CBB611EC10D1C484003BC3D3 /* PreferencesController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PreferencesController.m; sourceTree = "<group>"; };
 		CBB611FE10D1C4FD003BC3D3 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/Preferences.xib; sourceTree = "<group>"; };
 		CBEFAD2F113DEF6C00652711 /* Coruscation_DataModel */ = {
 			isa = PBXGroup;
 			children = (
-				CBAD255F115ECF8E0093C261 /* _SparkleBundle.h */,
-				CBAD255D115ECF8E0093C261 /* _SparkleBundle.m */,
-				CBAD255C115ECF8D0093C261 /* SparkleBundle.h */,
-				CBAD255A115ECF8D0093C261 /* SparkleBundle.m */,
+				CBAC698D116F5E93009C7A27 /* _SparkleBundle.h */,
+				CBAC698B116F5E93009C7A27 /* _SparkleBundle.m */,
+				CBAC698A116F5E93009C7A27 /* SparkleBundle.h */,
+				CBAC6988116F5E92009C7A27 /* SparkleBundle.m */,
 			);
 			path = Coruscation_DataModel;
 			sourceTree = "<group>";
 				CB5F37B310C8A128008FB459 /* UpdateCountTransformer.m in Sources */,
 				CBB6122010D1C622003BC3D3 /* PreferencesController.m in Sources */,
 				CB4D773111092ABC000EF799 /* NSFileManager+CoruscationAdditions.m in Sources */,
-				CBAD255B115ECF8D0093C261 /* SparkleBundle.m in Sources */,
-				CBAD255E115ECF8E0093C261 /* _SparkleBundle.m in Sources */,
+				CBAC6989116F5E92009C7A27 /* SparkleBundle.m in Sources */,
+				CBAC698C116F5E93009C7A27 /* _SparkleBundle.m in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
 			isa = XCBuildConfiguration;
 			buildSettings = {
 				ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
-				CURRENT_PROJECT_VERSION = 14;
+				CURRENT_PROJECT_VERSION = 15;
 				GCC_C_LANGUAGE_STANDARD = gnu99;
 				GCC_ENABLE_OBJC_GC = required;
 				GCC_WARN_ABOUT_RETURN_TYPE = YES;
 			isa = XCBuildConfiguration;
 			buildSettings = {
 				ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
-				CURRENT_PROJECT_VERSION = 14;
+				CURRENT_PROJECT_VERSION = 15;
 				GCC_C_LANGUAGE_STANDARD = gnu99;
 				GCC_ENABLE_OBJC_GC = required;
 				GCC_WARN_ABOUT_RETURN_TYPE = YES;

CoruscationAgent-Info.plist

 	<key>CFBundleSignature</key>
 	<string>????</string>
 	<key>CFBundleVersion</key>
-	<string>14</string>
+	<string>15</string>
 	<key>LSMinimumSystemVersion</key>
 	<string>${MACOSX_DEPLOYMENT_TARGET}</string>
 	<key>NSMainNibFile</key>

CoruscationDelegate.h

 - (IBAction) openSelected:(id)sender;
 - (IBAction) revealSelected:(id)sender;
 - (IBAction) releaseNotesForSelected:(id)sender;
+- (IBAction) downloadUpdateForSelected:(id)sender;
 
 @property (retain) IBOutlet NSCollectionView *collectionView;
 @property (nonatomic, retain, readonly) NSPersistentStoreCoordinator *persistentStoreCoordinator;

CoruscationDelegate.m

 	sparkleBundle.bundlePath = [url path];
 	sparkleBundle.availableUpdateVersion = [userInfo objectForKey:@"availableUpdateVersion"];
 	sparkleBundle.releaseNotesURL = [[userInfo objectForKey:@"releaseNotesURL"] absoluteString];
+	sparkleBundle.fileURL = [[userInfo objectForKey:@"fileURL"] absoluteString];
 	sparkleBundle.itemDescription = [userInfo objectForKey:@"itemDescription"];
 	if ([moc save:nil])
 		[[NSApplication sharedApplication] dockTile].badgeLabel = [NSString stringWithFormat:@"%u", ++self.count];
 			case 2:
 				[self releaseNotesForSelected:sender];
 				break;
+			case 3:
+				[self downloadUpdateForSelected:sender];
+				break;
 			default:
 				break;
 		}
 	}
 }
 
+- (IBAction) downloadUpdateForSelected:(id)sender {
+	for (SparkleBundle *sparkleBundle in [self.updateItems selectedObjects]) {
+		if (sparkleBundle.fileURL) {
+			NSURL *url = [NSURL URLWithString:sparkleBundle.fileURL];
+			[[NSWorkspace sharedWorkspace] openURL:url];
+		}
+	}
+}
+
 @dynamic persistentStoreCoordinator, managedObjectModel, managedObjectContext;
 @synthesize collectionView = i_collectionView, updateItems = i_updateItems, operationQueue = i_operationQueue, sorter = i_sorter, count = i_count;
 

Coruscation_DataModel.xcdatamodel/elements

Binary file modified.

Coruscation_DataModel.xcdatamodel/layout

Binary file modified.

Coruscation_DataModel/_SparkleBundle.h

 
 
 
+@property (nonatomic, retain) NSString *fileURL;
+
+//- (BOOL)validateFileURL:(id*)value_ error:(NSError**)error_;
+
+
+
 @property (nonatomic, retain) NSString *availableUpdateVersion;
 
 //- (BOOL)validateAvailableUpdateVersion:(id*)value_ error:(NSError**)error_;

Coruscation_DataModel/_SparkleBundle.m

 
 
 
+@dynamic fileURL;
+
+
+
+
+
+
 @dynamic availableUpdateVersion;
 
 

English.lproj/Coruscation-MainMenu.xib

 	<data>
 		<int key="IBDocument.SystemTarget">1060</int>
 		<string key="IBDocument.SystemVersion">10D573</string>
-		<string key="IBDocument.InterfaceBuilderVersion">740</string>
+		<string key="IBDocument.InterfaceBuilderVersion">762</string>
 		<string key="IBDocument.AppKitVersion">1038.29</string>
 		<string key="IBDocument.HIToolboxVersion">460.00</string>
 		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
 			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
-			<string key="NS.object.0">740</string>
+			<string key="NS.object.0">762</string>
 		</object>
 		<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
 			<bool key="EncodedWithXMLCoder">YES</bool>
 									</object>
 									<string key="NSFrame">{{1, 1}, {386, 263}}</string>
 									<reference key="NSSuperview" ref="713813365"/>
-									<reference key="NSNextKeyView" ref="701135899"/>
 									<reference key="NSDocView" ref="701135899"/>
 									<object class="NSColor" key="NSBGColor" id="625424635">
 										<int key="NSColorSpace">6</int>
 							</object>
 							<string key="NSFrame">{{-1, 37}, {388, 265}}</string>
 							<reference key="NSSuperview" ref="823886803"/>
-							<reference key="NSNextKeyView" ref="180506337"/>
 							<int key="NSsFlags">561</int>
 							<reference key="NSVScroller" ref="852514775"/>
 							<reference key="NSHScroller" ref="133657282"/>
 						<object class="NSTextField" id="11130461">
 							<reference key="NSNextResponder" ref="823886803"/>
 							<int key="NSvFlags">293</int>
-							<string key="NSFrame">{{172, 11}, {121, 14}}</string>
+							<string key="NSFrame">{{184, 13}, {121, 14}}</string>
 							<reference key="NSSuperview" ref="823886803"/>
 							<bool key="NSEnabled">YES</bool>
 							<object class="NSTextFieldCell" key="NSCell" id="629577706">
 						<object class="NSSegmentedControl" id="504117047">
 							<reference key="NSNextResponder" ref="823886803"/>
 							<int key="NSvFlags">292</int>
-							<string key="NSFrame">{{20, 10}, {100, 19}}</string>
+							<string key="NSFrame">{{20, 10}, {128, 19}}</string>
 							<reference key="NSSuperview" ref="823886803"/>
 							<bool key="NSEnabled">YES</bool>
 							<object class="NSSegmentedCell" key="NSCell" id="170332673">
 											<string key="NSResourceName">NSGoRightTemplate</string>
 										</object>
 										<string key="NSSegmentItemLabel"/>
-										<string key="NSSegmentItemTooltip">Open selected</string>
+										<string key="NSSegmentItemTooltip">Launch selection</string>
 										<int key="NSSegmentItemImageScaling">0</int>
 									</object>
 									<object class="NSSegmentItem">
 											<string key="NSResourceName">RevealTemplate</string>
 										</object>
 										<string key="NSSegmentItemLabel"/>
-										<string key="NSSegmentItemTooltip">Reveal in Finder</string>
+										<string key="NSSegmentItemTooltip">Reveal selection in Finder</string>
 										<int key="NSSegmentItemTag">1</int>
 										<int key="NSSegmentItemImageScaling">0</int>
 									</object>
 									<object class="NSSegmentItem">
 										<double key="NSSegmentItemWidth">32</double>
 										<string key="NSSegmentItemLabel">@</string>
-										<string key="NSSegmentItemTooltip">Release notes</string>
+										<string key="NSSegmentItemTooltip">Release notes for selection</string>
 										<int key="NSSegmentItemTag">2</int>
 										<int key="NSSegmentItemImageScaling">0</int>
 									</object>
+									<object class="NSSegmentItem">
+										<string key="NSSegmentItemLabel">⬇</string>
+										<string key="NSSegmentItemTooltip">Download update for selection</string>
+										<int key="NSSegmentItemTag">3</int>
+										<int key="NSSegmentItemImageScaling">0</int>
+									</object>
 								</object>
 								<int key="NSSelectedSegment">1</int>
 								<int key="NSTrackingMode">2</int>
 								<bool key="EncodedWithXMLCoder">YES</bool>
 								<object class="NSMenuItem" id="638448827">
 									<reference key="NSMenu" ref="960517776"/>
-									<string key="NSTitle">Open Selected</string>
+									<string key="NSTitle">Launch</string>
 									<string key="NSKeyEquiv">o</string>
 									<int key="NSKeyEquivModMask">1048576</int>
 									<int key="NSMnemonicLoc">2147483647</int>
 									<reference key="NSOnImage" ref="893455832"/>
 									<reference key="NSMixedImage" ref="424226900"/>
 								</object>
+								<object class="NSMenuItem" id="502814811">
+									<reference key="NSMenu" ref="960517776"/>
+									<string key="NSTitle">Download</string>
+									<string key="NSKeyEquiv">d</string>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="893455832"/>
+									<reference key="NSMixedImage" ref="424226900"/>
+								</object>
 								<object class="NSMenuItem" id="147581824">
 									<reference key="NSMenu" ref="960517776"/>
 									<bool key="NSIsDisabled">YES</bool>
 					</object>
 					<int key="connectionID">816</int>
 				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">downloadUpdateForSelected:</string>
+						<reference key="source" ref="612578685"/>
+						<reference key="destination" ref="502814811"/>
+					</object>
+					<int key="connectionID">818</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBBindingConnection" key="connection">
+						<string key="label">enabled: selectedObjects.@count</string>
+						<reference key="source" ref="502814811"/>
+						<reference key="destination" ref="32395910"/>
+						<object class="NSNibBindingConnector" key="connector">
+							<reference key="NSSource" ref="502814811"/>
+							<reference key="NSDestination" ref="32395910"/>
+							<string key="NSLabel">enabled: selectedObjects.@count</string>
+							<string key="NSBinding">enabled</string>
+							<string key="NSKeyPath">selectedObjects.@count</string>
+							<int key="NSNibBindingConnectorVersion">2</int>
+						</object>
+					</object>
+					<int key="connectionID">821</int>
+				</object>
 			</object>
 			<object class="IBMutableOrderedSet" key="objectRecords">
 				<object class="NSArray" key="orderedObjects">
 							<bool key="EncodedWithXMLCoder">YES</bool>
 							<reference ref="713813365"/>
 							<reference ref="1071071088"/>
+							<reference ref="836205286"/>
+							<reference ref="504117047"/>
 							<reference ref="11130461"/>
-							<reference ref="504117047"/>
-							<reference ref="836205286"/>
 						</object>
 						<reference key="parent" ref="483958638"/>
 					</object>
 							<reference ref="125017931"/>
 							<reference ref="220398764"/>
 							<reference ref="147581824"/>
+							<reference ref="502814811"/>
 						</object>
 						<reference key="parent" ref="842783111"/>
 					</object>
 						<reference key="object" ref="10743594"/>
 						<reference key="parent" ref="836205286"/>
 					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">817</int>
+						<reference key="object" ref="502814811"/>
+						<reference key="parent" ref="960517776"/>
+					</object>
 				</object>
 			</object>
 			<object class="NSMutableDictionary" key="flattenedProperties">
 					<string>81.IBPluginDependency</string>
 					<string>81.ImportedFromIB2</string>
 					<string>810.IBPluginDependency</string>
+					<string>817.IBPluginDependency</string>
 					<string>83.IBPluginDependency</string>
 					<string>83.ImportedFromIB2</string>
 				</object>
 					<string>{379, 302}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
-					<string>{{386, 1002}, {217, 93}}</string>
+					<string>{{793, 940}, {217, 93}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="3"/>
+					<integer value="0"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 						</object>
 					</object>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>{{707, 910}, {199, 123}}</string>
+					<string>{{707, 890}, {199, 143}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<integer value="1"/>
 				</object>
 			</object>
 				</object>
 			</object>
 			<nil key="sourceID"/>
-			<int key="maxID">816</int>
+			<int key="maxID">821</int>
 		</object>
 		<object class="IBClassDescriber" key="IBDocument.Classes">
 			<object class="NSMutableArray" key="referencedPartialClassDescriptions">
 						<bool key="EncodedWithXMLCoder">YES</bool>
 						<object class="NSArray" key="dict.sortedKeys">
 							<bool key="EncodedWithXMLCoder">YES</bool>
+							<string>downloadUpdateForSelected:</string>
 							<string>go:</string>
 							<string>openSelected:</string>
 							<string>refresh:</string>
 							<string>id</string>
 							<string>id</string>
 							<string>id</string>
+							<string>id</string>
 						</object>
 					</object>
 					<object class="NSMutableDictionary" key="outlets">
 			</object>
 		</object>
 		<int key="IBDocument.localizationMode">0</int>
+		<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string>
 		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults">
 			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string>
 			<integer value="1060" key="NS.object.0"/>
 		<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
 		<string key="IBDocument.LastKnownRelativeProjectPath">../Coruscation.xcodeproj</string>
 		<int key="IBDocument.defaultPropertyAccessControl">3</int>
+		<object class="NSMutableDictionary" key="IBDocument.LastKnownImageSizes">
+			<bool key="EncodedWithXMLCoder">YES</bool>
+			<object class="NSArray" key="dict.sortedKeys">
+				<bool key="EncodedWithXMLCoder">YES</bool>
+				<string>NSApplicationIcon</string>
+				<string>NSGoRightTemplate</string>
+				<string>NSMenuCheckmark</string>
+				<string>NSMenuMixedState</string>
+				<string>NSRefreshTemplate</string>
+				<string>RevealTemplate</string>
+			</object>
+			<object class="NSMutableArray" key="dict.values">
+				<bool key="EncodedWithXMLCoder">YES</bool>
+				<string>{128, 128}</string>
+				<string>{9, 9}</string>
+				<string>{9, 8}</string>
+				<string>{7, 2}</string>
+				<string>{10, 12}</string>
+				<string>{128, 128}</string>
+			</object>
+		</object>
 	</data>
 </archive>
 		<description>Most recent changes with links to updates.</description>
 		<language>en</language>
 		<item>
-			<title>Version 1.2 (14)</title>
+			<title>Version 1.2 (15)</title>
 			<sparkle:releaseNotesLink>https://bitbucket.org/kolpanic/coruscation/downloads/relnotes.html</sparkle:releaseNotesLink>
-			<pubDate>Tue, 6 Apr 2010 09:00:00 -0500</pubDate>
+			<pubDate>Fri, 9 Apr 2010 09:00:00 -0500</pubDate>
 			<enclosure url="https://bitbucket.org/kolpanic/coruscation/downloads/Coruscation.zip"
-				sparkle:version="14" sparkle:shortVersionString="1.2" type="application/octet-stream" />
+				sparkle:version="15" sparkle:shortVersionString="1.2" type="application/octet-stream" />
 		</item>
 	</channel>
 </rss>
 	</head>
 	<body>
 		<h1>Coruscation</span></h1>
-		<h2>Changes in Version 1.2 (14) &mdash; April 6, 2010</h2>
+		<h2>Changes in Version 1.2 (15) &mdash; April 9, 2010</h2>
 		<ul>
 			<li>Minor bug fixes and enhancements.</li>
 		</ul>
 		<h2>Changes in Previous Versions</h2>
 		<ul>
+			<li>Add a download update option.</li>
 			<li>Rearrange the buttons.</li>
 			<li>Add a button to view release notes for available updates.</li>
 			<li>Scan typical locations for Sparkle-enabled bundles: Internet Plug-Ins/ and PreferencePanes/ in /Library. and ~/Library/.</li>