Commits

bgannin  committed 3ef7f42

BeepHammer has a customized sending process now that allows you to define the type and number of times posted. Other UI revisions and cleanup, including proper memory and an InfoPlist.

  • Participants
  • Parent commits 70a92f2
  • Branches BeepHammer

Comments (0)

Files changed (10)

File BeepController.h

 	NSString *addButtonTitle, *editButtonTitle;
 	
 	IBOutlet NSButton		*growlLoggingButton;		// The checkbox to toggle logging, removed from main pane
+	
+	IBOutlet NSMatrix		*groupingType;				// The choices for batch grouping type [selection | all]
+	IBOutlet NSTextField	*batchCountField;			// The number of notifications to post
 
 	IBOutlet NSWindow		*mainWindow;
 	IBOutlet NSTableView	*notificationsTable;		// The table of notifications

File BeepController.m

 
 - (IBAction)toggleGrowlLogging:(id)sender
 {
+#pragma mark This is a cheap hack to work with the preference
 	NSMutableDictionary *prefsDict = [[NSMutableDictionary alloc] initWithContentsOfFile:GROWL_PREFS_PATH];
 	[prefsDict setObject:[NSNumber numberWithInt:[sender state]] forKey:@"GrowlLoggingEnabled"];
 	[prefsDict writeToFile:GROWL_PREFS_PATH atomically:NO];
 	int selectedRow = [notificationsTable selectedRow];
 
 	if (selectedRow != -1){
-		//send a notification for the selected table cell
-		NSDictionary *note = [notifications objectAtIndex:selectedRow];
-
-		//NSLog(@"note - %@", note);
-		[GrowlApplicationBridge notifyWithTitle:[note objectForKey:GROWL_NOTIFICATION_TITLE]
-							description: [note objectForKey:GROWL_NOTIFICATION_DESCRIPTION]
-					   notificationName: [note objectForKey:GROWL_NOTIFICATION_NAME]
-							   iconData: [note objectForKey:GROWL_NOTIFICATION_ICON]
-							   priority:[[note objectForKey:GROWL_NOTIFICATION_PRIORITY] intValue]
-							   isSticky:[[note objectForKey:GROWL_NOTIFICATION_STICKY] boolValue]
-						   clickContext:nil];
+		int batchCount = ([batchCountField intValue] > 0 ? [batchCountField intValue] : 1); // always 1
+		
+		if([groupingType selectedRow] == 0)
+		{
+			// loop through and send the appropriate number of notifications
+			while(batchCount > 0)
+			{
+				//send a notification for the selected table cell
+				NSDictionary *note = [notifications objectAtIndex:selectedRow];
+				
+				//NSLog(@"note - %@", note);
+				[GrowlApplicationBridge notifyWithTitle:[note objectForKey:GROWL_NOTIFICATION_TITLE]
+											description: [note objectForKey:GROWL_NOTIFICATION_DESCRIPTION]
+									   notificationName: [note objectForKey:GROWL_NOTIFICATION_NAME]
+											   iconData: [note objectForKey:GROWL_NOTIFICATION_ICON]
+											   priority:[[note objectForKey:GROWL_NOTIFICATION_PRIORITY] intValue]
+											   isSticky:[[note objectForKey:GROWL_NOTIFICATION_STICKY] boolValue]
+										   clickContext:nil];							
+				
+				batchCount--;
+			}
+		}
 	}
 }
 
 	BOOL rowIsSelected = ([notificationsTable selectedRow] != -1);
 
 	[sendButton setEnabled:rowIsSelected];
+	[batchCountField setEnabled:rowIsSelected];
+	[groupingType setEnabled:rowIsSelected];
 }
 
 #pragma mark NSApplication Delegate Methods

File BeepHammer.xcodeproj/bgannin.mode1

 			<key>Layout</key>
 			<array>
 				<dict>
-					<key>BecomeActive</key>
-					<true/>
 					<key>ContentConfiguration</key>
 					<dict>
 						<key>PBXBottomSmartGroupGIDs</key>
 							<key>PBXSmartGroupTreeModuleOutlineStateExpansionKey</key>
 							<array>
 								<string>073B924D06855E0F0068C763</string>
+								<string>073B926E06855E860068C763</string>
 								<string>073B927106855E900068C763</string>
 								<string>1C37FBAC04509CD000000102</string>
 								<string>1C37FABC05509CD000000102</string>
 							<key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key>
 							<array>
 								<array>
+									<integer>6</integer>
+									<integer>2</integer>
 									<integer>0</integer>
 								</array>
 							</array>
 							<real>252</real>
 						</array>
 						<key>RubberWindowFrame</key>
-						<string>128 226 1351 734 0 0 1680 1028 </string>
+						<string>68 221 1351 734 0 0 1680 1028 </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>C43640800B0FCAFD00E4FC4B</string>
+										<string>C43640F00B100DAE00E4FC4B</string>
 										<key>history</key>
 										<array>
-											<string>C43640770B0FCAFD00E4FC4B</string>
-											<string>C43640780B0FCAFD00E4FC4B</string>
-											<string>C43640790B0FCAFD00E4FC4B</string>
-											<string>C436407A0B0FCAFD00E4FC4B</string>
+											<string>C436409B0B0FF36700E4FC4B</string>
+											<string>C436409C0B0FF36700E4FC4B</string>
+											<string>C436409D0B0FF36700E4FC4B</string>
+											<string>C43640E30B100D8D00E4FC4B</string>
+											<string>C43640E40B100D8D00E4FC4B</string>
+											<string>C43640E50B100D8D00E4FC4B</string>
+											<string>C43640E60B100D8D00E4FC4B</string>
 										</array>
 										<key>prevStack</key>
 										<array>
 											<string>C436407B0B0FCAFD00E4FC4B</string>
 											<string>C436407C0B0FCAFD00E4FC4B</string>
 											<string>C436407D0B0FCAFD00E4FC4B</string>
-											<string>C436407E0B0FCAFD00E4FC4B</string>
-											<string>C436407F0B0FCAFD00E4FC4B</string>
+											<string>C43640A00B0FF36700E4FC4B</string>
+											<string>C43640A10B0FF36700E4FC4B</string>
+											<string>C43640A20B0FF36700E4FC4B</string>
+											<string>C43640A30B0FF36700E4FC4B</string>
+											<string>C43640A40B0FF36700E4FC4B</string>
+											<string>C43640B30B10058800E4FC4B</string>
+											<string>C43640B40B10058800E4FC4B</string>
+											<string>C43640B50B10058800E4FC4B</string>
+											<string>C43640BB0B10064C00E4FC4B</string>
+											<string>C43640E70B100D8D00E4FC4B</string>
+											<string>C43640E80B100D8D00E4FC4B</string>
+											<string>C43640E90B100D8D00E4FC4B</string>
+											<string>C43640EA0B100D8D00E4FC4B</string>
 										</array>
 									</dict>
 									<key>SplitCount</key>
 							<key>GeometryConfiguration</key>
 							<dict>
 								<key>Frame</key>
-								<string>{{0, 0}, {1077, 343}}</string>
+								<string>{{0, 0}, {1077, 486}}</string>
 								<key>RubberWindowFrame</key>
-								<string>128 226 1351 734 0 0 1680 1028 </string>
+								<string>68 221 1351 734 0 0 1680 1028 </string>
 							</dict>
 							<key>Module</key>
 							<string>PBXNavigatorGroup</string>
 							<key>Proportion</key>
-							<string>343pt</string>
+							<string>486pt</string>
 						</dict>
 						<dict>
 							<key>ContentConfiguration</key>
 							<key>GeometryConfiguration</key>
 							<dict>
 								<key>Frame</key>
-								<string>{{0, 348}, {1077, 345}}</string>
+								<string>{{0, 491}, {1077, 202}}</string>
 								<key>RubberWindowFrame</key>
-								<string>128 226 1351 734 0 0 1680 1028 </string>
+								<string>68 221 1351 734 0 0 1680 1028 </string>
 							</dict>
 							<key>Module</key>
 							<string>XCDetailModule</string>
 							<key>Proportion</key>
-							<string>345pt</string>
+							<string>202pt</string>
 						</dict>
 					</array>
 					<key>Proportion</key>
 			</array>
 			<key>TableOfContents</key>
 			<array>
-				<string>C4363FE10B0FBD8600E4FC4B</string>
+				<string>C436408B0B0FCC2E00E4FC4B</string>
 				<string>1CE0B1FE06471DED0097A5F4</string>
-				<string>C4363FE20B0FBD8600E4FC4B</string>
+				<string>C436408C0B0FCC2E00E4FC4B</string>
 				<string>1CE0B20306471E060097A5F4</string>
 				<string>1CE0B20506471E060097A5F4</string>
 			</array>
 	<integer>5</integer>
 	<key>WindowOrderList</key>
 	<array>
-		<string>C43640690B0FC87D00E4FC4B</string>
-		<string>C436406A0B0FC87D00E4FC4B</string>
-		<string>C43640640B0FC83D00E4FC4B</string>
-		<string>1CD10A99069EF8BA00B06720</string>
-		<string>C43640630B0FC83D00E4FC4B</string>
 		<string>1C0AD2B3069F1EA900FABCE6</string>
 		<string>C4363F320B0FBB5A00E4FC4B</string>
 		<string>/Users/bgannin/Projects/growl/Developer Tools/BeepHammer/BeepHammer.xcodeproj</string>
 	</array>
 	<key>WindowString</key>
-	<string>128 226 1351 734 0 0 1680 1028 </string>
+	<string>68 221 1351 734 0 0 1680 1028 </string>
 	<key>WindowTools</key>
 	<array>
 		<dict>
 							<string>309pt</string>
 						</dict>
 						<dict>
-							<key>BecomeActive</key>
-							<true/>
 							<key>ContentConfiguration</key>
 							<dict>
 								<key>PBXBuildLogShowsTranscriptDefaultKey</key>
 			<key>TableOfContents</key>
 			<array>
 				<string>C4363F320B0FBB5A00E4FC4B</string>
-				<string>C4363FED0B0FBDCF00E4FC4B</string>
+				<string>C43640910B0FE0CF00E4FC4B</string>
 				<string>1CD0528F0623707200166675</string>
 				<string>XCMainBuildResultsModuleGUID</string>
 			</array>
 			<key>TableOfContents</key>
 			<array>
 				<string>1C0AD2B3069F1EA900FABCE6</string>
-				<string>C4363FEE0B0FBDCF00E4FC4B</string>
+				<string>C43640920B0FE0CF00E4FC4B</string>
 				<string>1CD0528B0623707200166675</string>
-				<string>C4363FEF0B0FBDCF00E4FC4B</string>
+				<string>C43640930B0FE0CF00E4FC4B</string>
 			</array>
 			<key>ToolbarConfiguration</key>
 			<string>xcode.toolbar.config.run</string>

File BeepHammer.xcodeproj/bgannin.pbxuser

 	};
 	0717FC40076589230083E17E /* English */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {925, 698}}";
-			sepNavSelRange = "{0, 0}";
-			sepNavVisRect = "{{0, 0}, {925, 698}}";
+			sepNavIntBoundsRect = "{{0, 0}, {1030, 469}}";
+			sepNavSelRange = "{75, 0}";
+			sepNavVisRect = "{{0, 0}, {1030, 469}}";
 			sepNavWindowFrame = "{{61, 169}, {970, 812}}";
 		};
 	};
 				);
 			};
 			PBXConfiguration.PBXFileTableDataSource3.PBXFileTableDataSource = {
-				PBXFileTableDataSourceColumnSortingDirectionKey = 1;
-				PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID;
+				PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
+				PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_FiletypeID;
 				PBXFileTableDataSourceColumnWidthsKey = (
 					20,
 					838,
 					PBXFileDataSource_Warnings_ColumnID,
 				);
 			};
-			PBXPerProjectTemplateStateSaveDate = 185580781;
-			PBXWorkspaceStateSaveDate = 185580781;
+			PBXPerProjectTemplateStateSaveDate = 185584684;
+			PBXWorkspaceStateSaveDate = 185584684;
 		};
 		perUserProjectItems = {
-			C43640770B0FCAFD00E4FC4B /* PBXTextBookmark */ = C43640770B0FCAFD00E4FC4B /* PBXTextBookmark */;
-			C43640780B0FCAFD00E4FC4B /* PBXTextBookmark */ = C43640780B0FCAFD00E4FC4B /* PBXTextBookmark */;
-			C43640790B0FCAFD00E4FC4B /* PBXTextBookmark */ = C43640790B0FCAFD00E4FC4B /* PBXTextBookmark */;
-			C436407A0B0FCAFD00E4FC4B /* PBXTextBookmark */ = C436407A0B0FCAFD00E4FC4B /* PBXTextBookmark */;
-			C436407B0B0FCAFD00E4FC4B /* PBXTextBookmark */ = C436407B0B0FCAFD00E4FC4B /* PBXTextBookmark */;
-			C436407C0B0FCAFD00E4FC4B /* PBXTextBookmark */ = C436407C0B0FCAFD00E4FC4B /* PBXTextBookmark */;
-			C436407D0B0FCAFD00E4FC4B /* PBXTextBookmark */ = C436407D0B0FCAFD00E4FC4B /* PBXTextBookmark */;
-			C436407E0B0FCAFD00E4FC4B /* PBXTextBookmark */ = C436407E0B0FCAFD00E4FC4B /* PBXTextBookmark */;
-			C436407F0B0FCAFD00E4FC4B /* PBXTextBookmark */ = C436407F0B0FCAFD00E4FC4B /* PBXTextBookmark */;
-			C43640800B0FCAFD00E4FC4B /* PBXTextBookmark */ = C43640800B0FCAFD00E4FC4B /* PBXTextBookmark */;
+			C43640770B0FCAFD00E4FC4B = C43640770B0FCAFD00E4FC4B /* PBXTextBookmark */;
+			C43640780B0FCAFD00E4FC4B = C43640780B0FCAFD00E4FC4B /* PBXTextBookmark */;
+			C43640790B0FCAFD00E4FC4B = C43640790B0FCAFD00E4FC4B /* PBXTextBookmark */;
+			C436407A0B0FCAFD00E4FC4B = C436407A0B0FCAFD00E4FC4B /* PBXTextBookmark */;
+			C436407B0B0FCAFD00E4FC4B = C436407B0B0FCAFD00E4FC4B /* PBXTextBookmark */;
+			C436407C0B0FCAFD00E4FC4B = C436407C0B0FCAFD00E4FC4B /* PBXTextBookmark */;
+			C436407D0B0FCAFD00E4FC4B = C436407D0B0FCAFD00E4FC4B /* PBXTextBookmark */;
+			C436407E0B0FCAFD00E4FC4B = C436407E0B0FCAFD00E4FC4B /* PBXTextBookmark */;
+			C436407F0B0FCAFD00E4FC4B = C436407F0B0FCAFD00E4FC4B /* PBXTextBookmark */;
+			C43640800B0FCAFD00E4FC4B = C43640800B0FCAFD00E4FC4B /* PBXTextBookmark */;
+			C436408A0B0FCC2E00E4FC4B /* PBXTextBookmark */ = C436408A0B0FCC2E00E4FC4B /* PBXTextBookmark */;
+			C43640900B0FE0CF00E4FC4B /* PBXTextBookmark */ = C43640900B0FE0CF00E4FC4B /* PBXTextBookmark */;
+			C436409B0B0FF36700E4FC4B /* PBXTextBookmark */ = C436409B0B0FF36700E4FC4B /* PBXTextBookmark */;
+			C436409C0B0FF36700E4FC4B /* PBXTextBookmark */ = C436409C0B0FF36700E4FC4B /* PBXTextBookmark */;
+			C436409D0B0FF36700E4FC4B /* PBXTextBookmark */ = C436409D0B0FF36700E4FC4B /* PBXTextBookmark */;
+			C436409E0B0FF36700E4FC4B /* PBXTextBookmark */ = C436409E0B0FF36700E4FC4B /* PBXTextBookmark */;
+			C436409F0B0FF36700E4FC4B /* PBXTextBookmark */ = C436409F0B0FF36700E4FC4B /* PBXTextBookmark */;
+			C43640A00B0FF36700E4FC4B /* PBXTextBookmark */ = C43640A00B0FF36700E4FC4B /* PBXTextBookmark */;
+			C43640A10B0FF36700E4FC4B /* PBXTextBookmark */ = C43640A10B0FF36700E4FC4B /* PBXTextBookmark */;
+			C43640A20B0FF36700E4FC4B /* PBXTextBookmark */ = C43640A20B0FF36700E4FC4B /* PBXTextBookmark */;
+			C43640A30B0FF36700E4FC4B /* PBXTextBookmark */ = C43640A30B0FF36700E4FC4B /* PBXTextBookmark */;
+			C43640A40B0FF36700E4FC4B /* PBXTextBookmark */ = C43640A40B0FF36700E4FC4B /* PBXTextBookmark */;
+			C43640A50B0FF36700E4FC4B /* PBXTextBookmark */ = C43640A50B0FF36700E4FC4B /* PBXTextBookmark */;
+			C43640B10B10058800E4FC4B /* PBXTextBookmark */ = C43640B10B10058800E4FC4B /* PBXTextBookmark */;
+			C43640B20B10058800E4FC4B /* PBXTextBookmark */ = C43640B20B10058800E4FC4B /* PBXTextBookmark */;
+			C43640B30B10058800E4FC4B /* PBXTextBookmark */ = C43640B30B10058800E4FC4B /* PBXTextBookmark */;
+			C43640B40B10058800E4FC4B /* PBXTextBookmark */ = C43640B40B10058800E4FC4B /* PBXTextBookmark */;
+			C43640B50B10058800E4FC4B /* PBXTextBookmark */ = C43640B50B10058800E4FC4B /* PBXTextBookmark */;
+			C43640B60B10058800E4FC4B /* PBXTextBookmark */ = C43640B60B10058800E4FC4B /* PBXTextBookmark */;
+			C43640B90B10064C00E4FC4B /* PBXTextBookmark */ = C43640B90B10064C00E4FC4B /* PBXTextBookmark */;
+			C43640BA0B10064C00E4FC4B /* PBXTextBookmark */ = C43640BA0B10064C00E4FC4B /* PBXTextBookmark */;
+			C43640BB0B10064C00E4FC4B /* PBXTextBookmark */ = C43640BB0B10064C00E4FC4B /* PBXTextBookmark */;
+			C43640BC0B10064C00E4FC4B /* PBXTextBookmark */ = C43640BC0B10064C00E4FC4B /* PBXTextBookmark */;
+			C43640E30B100D8D00E4FC4B /* PBXTextBookmark */ = C43640E30B100D8D00E4FC4B /* PBXTextBookmark */;
+			C43640E40B100D8D00E4FC4B /* PBXTextBookmark */ = C43640E40B100D8D00E4FC4B /* PBXTextBookmark */;
+			C43640E50B100D8D00E4FC4B /* PBXTextBookmark */ = C43640E50B100D8D00E4FC4B /* PBXTextBookmark */;
+			C43640E60B100D8D00E4FC4B /* PBXTextBookmark */ = C43640E60B100D8D00E4FC4B /* PBXTextBookmark */;
+			C43640E70B100D8D00E4FC4B /* PBXTextBookmark */ = C43640E70B100D8D00E4FC4B /* PBXTextBookmark */;
+			C43640E80B100D8D00E4FC4B /* PBXTextBookmark */ = C43640E80B100D8D00E4FC4B /* PBXTextBookmark */;
+			C43640E90B100D8D00E4FC4B /* PBXTextBookmark */ = C43640E90B100D8D00E4FC4B /* PBXTextBookmark */;
+			C43640EA0B100D8D00E4FC4B /* PBXTextBookmark */ = C43640EA0B100D8D00E4FC4B /* PBXTextBookmark */;
+			C43640EB0B100D8D00E4FC4B /* PBXTextBookmark */ = C43640EB0B100D8D00E4FC4B /* PBXTextBookmark */;
+			C43640F00B100DAE00E4FC4B /* PBXTextBookmark */ = C43640F00B100DAE00E4FC4B /* PBXTextBookmark */;
 		};
 		sourceControlManager = C4363F2A0B0FBB2F00E4FC4B /* Source Control */;
 		userBuildSettings = {
 	};
 	073B927206855EB30068C763 /* BeepController.h */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {1030, 686}}";
-			sepNavSelRange = "{0, 0}";
-			sepNavVisRect = "{{0, 0}, {1030, 326}}";
+			sepNavIntBoundsRect = "{{0, 0}, {1030, 728}}";
+			sepNavSelRange = "{344, 0}";
+			sepNavVisRect = "{{0, 0}, {1030, 469}}";
 		};
 	};
 	073B927306855EB30068C763 /* BeepController.m */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {1030, 3962}}";
+			sepNavIntBoundsRect = "{{0, 0}, {1030, 4158}}";
+			sepNavSelRange = "{4710, 0}";
+			sepNavVisRect = "{{0, 1736}, {1030, 469}}";
+			sepNavWindowFrame = "{{130, 106}, {970, 812}}";
+		};
+	};
+	073B927606855EBF0068C763 /* BeepMain.m */ = {
+		uiCtxt = {
+			sepNavIntBoundsRect = "{{0, 0}, {1030, 326}}";
 			sepNavSelRange = "{0, 0}";
 			sepNavVisRect = "{{0, 0}, {1030, 326}}";
-			sepNavWindowFrame = "{{130, 106}, {970, 812}}";
 		};
 	};
 	073B92C4068563AC0068C763 /* whistle-cocoa.icns */ = {
 		fRef = 073B927206855EB30068C763 /* BeepController.h */;
 		name = "BeepController.h: toggleGrowlLogging:";
 		rLen = 0;
-		rLoc = 1333;
+		rLoc = 1511;
 		rType = 0;
 		vrLen = 916;
 		vrLoc = 772;
 		vrLen = 636;
 		vrLoc = 0;
 	};
+	C436408A0B0FCC2E00E4FC4B /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 073B927306855EB30068C763 /* BeepController.m */;
+		name = "BeepController.m: 1";
+		rLen = 0;
+		rLoc = 0;
+		rType = 0;
+		vrLen = 636;
+		vrLoc = 0;
+	};
+	C43640900B0FE0CF00E4FC4B /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 073B927306855EB30068C763 /* BeepController.m */;
+		name = "BeepController.m: 62";
+		rLen = 0;
+		rLoc = 1815;
+		rType = 0;
+		vrLen = 1041;
+		vrLoc = 1462;
+	};
+	C436409B0B0FF36700E4FC4B /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 073B927606855EBF0068C763 /* BeepMain.m */;
+		name = "BeepMain.m: 1";
+		rLen = 0;
+		rLoc = 0;
+		rType = 0;
+		vrLen = 86;
+		vrLoc = 0;
+	};
+	C436409C0B0FF36700E4FC4B /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 0717FC2B076587750083E17E /* BeepAdditions.h */;
+		name = "BeepAdditions.h: 1";
+		rLen = 0;
+		rLoc = 0;
+		rType = 0;
+		vrLen = 206;
+		vrLoc = 0;
+	};
+	C436409D0B0FF36700E4FC4B /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 0717FC2C076587750083E17E /* BeepAdditions.m */;
+		name = "BeepAdditions.m: 1";
+		rLen = 23;
+		rLoc = 0;
+		rType = 0;
+		vrLen = 325;
+		vrLoc = 0;
+	};
+	C436409E0B0FF36700E4FC4B /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 073B927206855EB30068C763 /* BeepController.h */;
+		name = "BeepController.h: 1";
+		rLen = 0;
+		rLoc = 0;
+		rType = 0;
+		vrLen = 1139;
+		vrLoc = 0;
+	};
+	C436409F0B0FF36700E4FC4B /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 073B927306855EB30068C763 /* BeepController.m */;
+		name = "NSMutableDictionary *prefsDict = [[NSMutableDictionary alloc] initWithContentsOfFile:GROWL_PREFS_PATH];";
+		rLen = 105;
+		rLoc = 1816;
+		rType = 0;
+		vrLen = 1041;
+		vrLoc = 1462;
+	};
+	C43640A00B0FF36700E4FC4B /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 073B927306855EB30068C763 /* BeepController.m */;
+		name = "NSMutableDictionary *prefsDict = [[NSMutableDictionary alloc] initWithContentsOfFile:GROWL_PREFS_PATH];";
+		rLen = 105;
+		rLoc = 1816;
+		rType = 0;
+		vrLen = 1041;
+		vrLoc = 1462;
+	};
+	C43640A10B0FF36700E4FC4B /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 073B927606855EBF0068C763 /* BeepMain.m */;
+		name = "BeepMain.m: 1";
+		rLen = 0;
+		rLoc = 0;
+		rType = 0;
+		vrLen = 86;
+		vrLoc = 0;
+	};
+	C43640A20B0FF36700E4FC4B /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 0717FC2B076587750083E17E /* BeepAdditions.h */;
+		name = "BeepAdditions.h: 1";
+		rLen = 0;
+		rLoc = 0;
+		rType = 0;
+		vrLen = 206;
+		vrLoc = 0;
+	};
+	C43640A30B0FF36700E4FC4B /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 0717FC2C076587750083E17E /* BeepAdditions.m */;
+		name = "BeepAdditions.m: 1";
+		rLen = 23;
+		rLoc = 0;
+		rType = 0;
+		vrLen = 325;
+		vrLoc = 0;
+	};
+	C43640A40B0FF36700E4FC4B /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 073B927206855EB30068C763 /* BeepController.h */;
+		name = "BeepController.h: 1";
+		rLen = 0;
+		rLoc = 0;
+		rType = 0;
+		vrLen = 1139;
+		vrLoc = 0;
+	};
+	C43640A50B0FF36700E4FC4B /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 073B927306855EB30068C763 /* BeepController.m */;
+		name = "BeepController.m: GROWL_NOTIFICATION_DEFAULT";
+		rLen = 0;
+		rLoc = 95;
+		rType = 0;
+		vrLen = 636;
+		vrLoc = 0;
+	};
+	C43640B10B10058800E4FC4B /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 073B927306855EB30068C763 /* BeepController.m */;
+		name = "BeepController.m: 238";
+		rLen = 0;
+		rLoc = 8276;
+		rType = 0;
+		vrLen = 746;
+		vrLoc = 7382;
+	};
+	C43640B20B10058800E4FC4B /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 073B927206855EB30068C763 /* BeepController.h */;
+		name = "BeepController.h: 1";
+		rLen = 0;
+		rLoc = 0;
+		rType = 0;
+		vrLen = 1139;
+		vrLoc = 0;
+	};
+	C43640B30B10058800E4FC4B /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 073B927306855EB30068C763 /* BeepController.m */;
+		name = "BeepController.m: 238";
+		rLen = 0;
+		rLoc = 8276;
+		rType = 0;
+		vrLen = 849;
+		vrLoc = 7279;
+	};
+	C43640B40B10058800E4FC4B /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 073B927206855EB30068C763 /* BeepController.h */;
+		name = "BeepController.h: 1";
+		rLen = 0;
+		rLoc = 0;
+		rType = 0;
+		vrLen = 1139;
+		vrLoc = 0;
+	};
+	C43640B50B10058800E4FC4B /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 073B927306855EB30068C763 /* BeepController.m */;
+		name = "BeepController.m: 238";
+		rLen = 0;
+		rLoc = 8276;
+		rType = 0;
+		vrLen = 746;
+		vrLoc = 7382;
+	};
+	C43640B60B10058800E4FC4B /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 073B927206855EB30068C763 /* BeepController.h */;
+		name = notification;
+		rLen = 12;
+		rLoc = 1377;
+		rType = 0;
+		vrLen = 922;
+		vrLoc = 725;
+	};
+	C43640B90B10064C00E4FC4B /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 073B927206855EB30068C763 /* BeepController.h */;
+		name = "BeepController.h: notificationSticky";
+		rLen = 0;
+		rLoc = 344;
+		rType = 0;
+		vrLen = 1084;
+		vrLoc = 0;
+	};
+	C43640BA0B10064C00E4FC4B /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 073B927306855EB30068C763 /* BeepController.m */;
+		name = "BeepController.m: 238";
+		rLen = 0;
+		rLoc = 8276;
+		rType = 0;
+		vrLen = 746;
+		vrLoc = 7382;
+	};
+	C43640BB0B10064C00E4FC4B /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 073B927206855EB30068C763 /* BeepController.h */;
+		name = "BeepController.h: notificationSticky";
+		rLen = 0;
+		rLoc = 344;
+		rType = 0;
+		vrLen = 1084;
+		vrLoc = 0;
+	};
+	C43640BC0B10064C00E4FC4B /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 073B927306855EB30068C763 /* BeepController.m */;
+		name = "BeepController.m: 236";
+		rLen = 0;
+		rLoc = 8203;
+		rType = 0;
+		vrLen = 746;
+		vrLoc = 7382;
+	};
+	C43640E30B100D8D00E4FC4B /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 0717FC40076589230083E17E /* English */;
+		name = "English: 2";
+		rLen = 0;
+		rLoc = 75;
+		rType = 0;
+		vrLen = 75;
+		vrLoc = 0;
+	};
+	C43640E40B100D8D00E4FC4B /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = C43640D00B10094C00E4FC4B /* English */;
+		name = "English: 5";
+		rLen = 0;
+		rLoc = 266;
+		rType = 0;
+		vrLen = 266;
+		vrLoc = 0;
+	};
+	C43640E50B100D8D00E4FC4B /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 073B927206855EB30068C763 /* BeepController.h */;
+		name = "BeepController.h: notificationSticky";
+		rLen = 0;
+		rLoc = 344;
+		rType = 0;
+		vrLen = 1512;
+		vrLoc = 0;
+	};
+	C43640E60B100D8D00E4FC4B /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 073B927306855EB30068C763 /* BeepController.m */;
+		name = "BeepController.m: 21";
+		rLen = 0;
+		rLoc = 544;
+		rType = 0;
+		vrLen = 980;
+		vrLoc = 54;
+	};
+	C43640E70B100D8D00E4FC4B /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 073B927306855EB30068C763 /* BeepController.m */;
+		name = "BeepController.m: 21";
+		rLen = 0;
+		rLoc = 544;
+		rType = 0;
+		vrLen = 980;
+		vrLoc = 54;
+	};
+	C43640E80B100D8D00E4FC4B /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 0717FC40076589230083E17E /* English */;
+		name = "English: 2";
+		rLen = 0;
+		rLoc = 75;
+		rType = 0;
+		vrLen = 75;
+		vrLoc = 0;
+	};
+	C43640E90B100D8D00E4FC4B /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = C43640D00B10094C00E4FC4B /* English */;
+		name = "English: 5";
+		rLen = 0;
+		rLoc = 266;
+		rType = 0;
+		vrLen = 266;
+		vrLoc = 0;
+	};
+	C43640EA0B100D8D00E4FC4B /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 073B927206855EB30068C763 /* BeepController.h */;
+		name = "BeepController.h: notificationSticky";
+		rLen = 0;
+		rLoc = 344;
+		rType = 0;
+		vrLen = 1512;
+		vrLoc = 0;
+	};
+	C43640EB0B100D8D00E4FC4B /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 073B927306855EB30068C763 /* BeepController.m */;
+		name = "BeepController.m: 140";
+		rLen = 0;
+		rLoc = 4710;
+		rType = 0;
+		vrLen = 1162;
+		vrLoc = 4282;
+	};
+	C43640F00B100DAE00E4FC4B /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 073B927306855EB30068C763 /* BeepController.m */;
+		name = "";
+		rLen = 5;
+		rLoc = 5409;
+		rType = 0;
+		vrLen = 1137;
+		vrLoc = 4421;
+	};
 	CBBC7DE20659313D00684B79 /* BeepHammer */ = {
 		activeExec = 0;
 		executables = (

File BeepHammer.xcodeproj/project.pbxproj

 		349D11AB079DDD5F00911D48 /* Growl.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 07D0C5B6068A470F0076D89A /* Growl.framework */; };
 		C4363FE70B0FBDBA00E4FC4B /* BeepHammer-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = C4363FE60B0FBDBA00E4FC4B /* BeepHammer-Info.plist */; };
 		C4363FF40B0FBE0F00E4FC4B /* BeepHammer.nib in Resources */ = {isa = PBXBuildFile; fileRef = 073B927D06855F050068C763 /* BeepHammer.nib */; };
+		C43640D10B10094C00E4FC4B /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = C43640CF0B10094C00E4FC4B /* InfoPlist.strings */; };
 /* End PBXBuildFile section */
 
 /* Begin PBXCopyFilesBuildPhase section */
 		073B92C4068563AC0068C763 /* whistle-cocoa.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = "whistle-cocoa.icns"; sourceTree = "<group>"; };
 		07D0C5B6068A470F0076D89A /* Growl.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Growl.framework; path = ../../build/Deployment/Growl.framework; sourceTree = "<group>"; };
 		C4363FE60B0FBDBA00E4FC4B /* BeepHammer-Info.plist */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xml; path = "BeepHammer-Info.plist"; sourceTree = "<group>"; };
+		C43640D00B10094C00E4FC4B /* English */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = "<group>"; };
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */
 				0717FC420765892F0083E17E /* Localizable.strings */,
 				073B927D06855F050068C763 /* BeepHammer.nib */,
 				073B92C4068563AC0068C763 /* whistle-cocoa.icns */,
+				C43640CF0B10094C00E4FC4B /* InfoPlist.strings */,
 			);
 			name = Resources;
 			sourceTree = "<group>";
 				073B92C5068563AC0068C763 /* whistle-cocoa.icns in Resources */,
 				0717FC430765892F0083E17E /* Localizable.strings in Resources */,
 				C4363FE70B0FBDBA00E4FC4B /* BeepHammer-Info.plist in Resources */,
+				C43640D10B10094C00E4FC4B /* InfoPlist.strings in Resources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
 			name = Localizable.strings;
 			sourceTree = "<group>";
 		};
+		C43640CF0B10094C00E4FC4B /* InfoPlist.strings */ = {
+			isa = PBXVariantGroup;
+			children = (
+				C43640D00B10094C00E4FC4B /* English */,
+			);
+			name = InfoPlist.strings;
+			sourceTree = "<group>";
+		};
 /* End PBXVariantGroup section */
 
 /* Begin XCBuildConfiguration section */

File English.lproj/BeepHammer.nib/classes.nib

             OUTLETS = {
                 addEditButton = NSButton; 
                 addNotification = NSButton; 
+                batchCountField = NSTextField; 
+                groupingType = NSMatrix; 
                 growlLoggingButton = NSButton; 
                 mainWindow = NSWindow; 
                 notificationDefault = NSButton; 

File English.lproj/BeepHammer.nib/info.nib

 	<integer>2</integer>
 	<key>IBOpenObjects</key>
 	<array>
-		<integer>365</integer>
+		<integer>21</integer>
 		<integer>29</integer>
-		<integer>21</integer>
 	</array>
 	<key>IBSystem Version</key>
 	<string>8L2127</string>

File English.lproj/BeepHammer.nib/keyedobjects.nib

Binary file modified.

File English.lproj/InfoPlist.strings

+CFBundleName = "BeepHammer";
+CFBundleShortVersionString = "0.1";
+CFBundleGetInfoString = "BeepHammer version 0.1, Copyright (c) 2006 The Growl Project.";
+NSHumanReadableCopyright = "A stress-testing developer tool for Growl.\nCopyright (c) 2006 The Growl Project.";

File English.lproj/Localizable.strings

Binary file modified.