Changeset 364 for trunk/Cocoa/Pester
- Timestamp:
- 11/28/07 01:29:26 (17 years ago)
- Location:
- trunk/Cocoa/Pester
- Files:
-
- 3 added
- 4 deleted
- 36 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Cocoa/Pester/Source/English.lproj/Alarms.nib/classes.nib
r102 r364 1 { 2 IBClasses = ( 3 {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, 4 {CLASS = NJRScrollView; LANGUAGE = ObjC; SUPERCLASS = NSScrollView; }, 5 { 6 CLASS = NJRTableDelegate; 7 LANGUAGE = ObjC; 8 OUTLETS = {tableView = NSTableView; }; 9 SUPERCLASS = NSObject; 10 }, 11 { 12 CLASS = NJRTableView; 13 LANGUAGE = ObjC; 14 OUTLETS = {typeSelectDisplay = id; }; 15 SUPERCLASS = NSTableView; 16 }, 17 {CLASS = NSObject; LANGUAGE = ObjC; }, 18 { 19 ACTIONS = {remove = id; }; 20 CLASS = PSAlarmsController; 21 LANGUAGE = ObjC; 22 OUTLETS = {alarmList = NSTableView; removeButton = NSButton; }; 23 SUPERCLASS = NSWindowController; 24 } 25 ); 26 IBVersion = 1; 27 } 1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 3 <plist version="1.0"> 4 <dict> 5 <key>IBClasses</key> 6 <array> 7 <dict> 8 <key>ACTIONS</key> 9 <dict> 10 <key>remove</key> 11 <string>id</string> 12 </dict> 13 <key>CLASS</key> 14 <string>PSAlarmsController</string> 15 <key>LANGUAGE</key> 16 <string>ObjC</string> 17 <key>OUTLETS</key> 18 <dict> 19 <key>alarmList</key> 20 <string>NSTableView</string> 21 <key>removeButton</key> 22 <string>NSButton</string> 23 </dict> 24 <key>SUPERCLASS</key> 25 <string>NSWindowController</string> 26 </dict> 27 <dict> 28 <key>CLASS</key> 29 <string>NJRTableDelegate</string> 30 <key>LANGUAGE</key> 31 <string>ObjC</string> 32 <key>OUTLETS</key> 33 <dict> 34 <key>tableView</key> 35 <string>NJRTableView</string> 36 </dict> 37 <key>SUPERCLASS</key> 38 <string>NSObject</string> 39 </dict> 40 <dict> 41 <key>CLASS</key> 42 <string>FirstResponder</string> 43 <key>LANGUAGE</key> 44 <string>ObjC</string> 45 <key>SUPERCLASS</key> 46 <string>NSObject</string> 47 </dict> 48 <dict> 49 <key>CLASS</key> 50 <string>NSObject</string> 51 <key>LANGUAGE</key> 52 <string>ObjC</string> 53 </dict> 54 <dict> 55 <key>CLASS</key> 56 <string>NJRScrollView</string> 57 <key>LANGUAGE</key> 58 <string>ObjC</string> 59 <key>SUPERCLASS</key> 60 <string>NSScrollView</string> 61 </dict> 62 <dict> 63 <key>CLASS</key> 64 <string>NJRTableView</string> 65 <key>LANGUAGE</key> 66 <string>ObjC</string> 67 <key>OUTLETS</key> 68 <dict> 69 <key>typeSelectDisplay</key> 70 <string>id</string> 71 </dict> 72 <key>SUPERCLASS</key> 73 <string>NSTableView</string> 74 </dict> 75 <dict> 76 <key>CLASS</key> 77 <string>NSTableView</string> 78 <key>LANGUAGE</key> 79 <string>ObjC</string> 80 <key>SUPERCLASS</key> 81 <string>NSControl</string> 82 </dict> 83 </array> 84 <key>IBVersion</key> 85 <string>1</string> 86 </dict> 87 </plist> -
trunk/Cocoa/Pester/Source/English.lproj/Alarms.nib/info.nib
r102 r364 1 1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">2 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 3 3 <plist version="1.0"> 4 4 <dict> 5 <key>IBDocumentLocation</key>6 <string>41 63 356 240 0 0 1280 832 </string>7 5 <key>IBFramework Version</key> 8 <string>291.0</string> 6 <string>629</string> 7 <key>IBLastKnownRelativeProjectPath</key> 8 <string>../../Pester.xcodeproj</string> 9 <key>IBOldestOS</key> 10 <integer>5</integer> 9 11 <key>IBOpenObjects</key> 10 12 <array> 11 <integer> 8</integer>13 <integer>9</integer> 12 14 </array> 13 15 <key>IBSystem Version</key> 14 <string>6I32</string> 16 <string>9B18</string> 17 <key>targetFramework</key> 18 <string>IBCocoaFramework</string> 15 19 </dict> 16 20 </plist> -
trunk/Cocoa/Pester/Source/English.lproj/MainMenu.nib/classes.nib
r363 r364 97 97 <string>NSStepper</string> 98 98 <key>soundRepetitions</key> 99 <string>N STextField</string>99 <string>NJRValidatingField</string> 100 100 <key>soundRepetitionsLabel</key> 101 101 <string>NSTextField</string> … … 142 142 </dict> 143 143 <dict> 144 <key>CLASS</key> 145 <string>NSMenuItem</string> 146 <key>LANGUAGE</key> 147 <string>ObjC</string> 148 <key>SUPERCLASS</key> 149 <string>NSObject</string> 150 </dict> 151 <dict> 144 152 <key>ACTIONS</key> 145 153 <dict> … … 161 169 <dict> 162 170 <key>CLASS</key> 163 <string>NSMenuItem</string>164 <key>LANGUAGE</key>165 <string>ObjC</string>166 <key>SUPERCLASS</key>167 <string>NSObject</string>168 </dict>169 <dict>170 <key>CLASS</key>171 171 <string>FirstResponder</string> 172 172 <key>LANGUAGE</key> … … 199 199 <string>NSPopUpButton</string> 200 200 </dict> 201 <key>SUPERCLASS</key> 202 <string>NJRValidatingField</string> 203 </dict> 204 <dict> 205 <key>CLASS</key> 206 <string>NJRValidatingField</string> 207 <key>LANGUAGE</key> 208 <string>ObjC</string> 201 209 <key>SUPERCLASS</key> 202 210 <string>NSTextField</string> -
trunk/Cocoa/Pester/Source/English.lproj/MainMenu.nib/info.nib
r363 r364 11 11 <key>IBOpenObjects</key> 12 12 <array> 13 <integer> 169</integer>13 <integer>507</integer> 14 14 </array> 15 15 <key>IBSystem Version</key> -
trunk/Cocoa/Pester/Source/Info-Pester.plist
r363 r364 8 8 <string>Pester</string> 9 9 <key>CFBundleGetInfoString</key> 10 <string>Pester 1.1b 5, © 2002–07 Nicholas Riley</string>10 <string>Pester 1.1b6, © 2002–07 Nicholas Riley</string> 11 11 <key>CFBundleIconFile</key> 12 12 <string>Application icon</string> … … 20 20 <string>APPL</string> 21 21 <key>CFBundleShortVersionString</key> 22 <string>1.1b 5</string>22 <string>1.1b6</string> 23 23 <key>CFBundleSignature</key> 24 24 <string>Pest</string> 25 25 <key>CFBundleVersion</key> 26 <string>2 1</string>26 <string>22</string> 27 27 <key>NSMainNibFile</key> 28 28 <string>MainMenu</string> -
trunk/Cocoa/Pester/Source/NJRHotKey.m
r355 r364 93 93 { 94 94 if ( (self = [self init]) != nil) { 95 NS_DURING 95 @try { 96 96 hotKeyCharacters = [[dict objectForKey: PLCharacters] retain]; 97 97 hotKeyModifierFlags = [[dict objectForKey: PLModifierFlags] unsignedIntValue]; 98 98 hotKeyCode = [[dict objectForKey: PLKeyCode] unsignedShortValue]; 99 NS_HANDLER 100 NS_ENDHANDLER 99 } 100 @catch (NSException *exception) { 101 } 101 102 if (hotKeyCharacters == nil || hotKeyCode == 0) { 102 103 [self release]; -
trunk/Cocoa/Pester/Source/NJRIntervalField.h
r53 r364 10 10 11 11 12 @interface NJRIntervalField : NSTextField { 12 #import "NJRValidatingField.h" 13 14 @interface NJRIntervalField : NJRValidatingField { 13 15 IBOutlet NSPopUpButton *intervalUnits; 14 16 } … … 17 19 - (BOOL)setInterval:(NSTimeInterval)interval; // returns false if out of range 18 20 19 - (void)handleDidFailToFormatString:(NSString *)string errorDescription:(NSString *)error label:(NSString *)label;20 21 21 22 @end -
trunk/Cocoa/Pester/Source/NJRIntervalField.m
r355 r364 80 80 } 81 81 82 - (void)handleDidFailToFormatString:(NSString *)string errorDescription:(NSString *)error label:(NSString *)label;83 {84 NSString *alertMessage = nil;85 NSString *alternateButtonString = nil;86 NSNumber *proposedValue = nil;87 NSDictionary *contextInfo;88 89 NSString *alertInformation = [NSString localizedStringWithFormat:90 NSLocalizedString(@"The %@ field must be set to a value between %@ and %@.",91 @"Informative text for alert posed by text field when invalid value entered"),92 label, [[self formatter] minimum], [[self formatter] maximum]];93 NSString *defaultButtonString = NSLocalizedString(@"Edit", @"Name of Edit button");94 NSString *otherButtonString = NSLocalizedString(@"Cancel", @"Name of Cancel button");95 96 if ([error isEqualToString:97 NSLocalizedStringFromTableInBundle(@"Fell short of minimum", @"Formatter",98 [NSBundle bundleForClass:[NSFormatter class]],99 @"Presented when user value smaller than minimum")]) {100 proposedValue = [[self formatter] minimum];101 alertMessage = [NSString stringWithFormat:102 NSLocalizedString(@"%@ is too small for the %@ field.",103 @"Message text for alert posed by numeric field when too-small value entered"),104 string, label];105 alternateButtonString = [NSString localizedStringWithFormat:106 NSLocalizedString(@"Set to %@",107 @"Name of alternate button for alert posed by numeric field when too-small value entered"),108 proposedValue];109 } else if ([error isEqualToString:110 NSLocalizedStringFromTableInBundle(@"Maximum exceeded", @"Formatter",111 [NSBundle bundleForClass:[NSFormatter class]],112 @"Presented when user value larger than maximum")]) {113 proposedValue = [[self formatter] maximum];114 alertMessage = [NSString stringWithFormat:115 NSLocalizedString(@"%@ is too large for the %@ field.",116 @"Message text for alert posed by numeric field when too-large value entered"),117 string, label];118 alternateButtonString = [NSString localizedStringWithFormat:119 NSLocalizedString(@"Set to %@",120 @"Name of alternate button for alert posed by numeric field when too-large value entered"),121 proposedValue];122 } else if ([error isEqualToString:123 NSLocalizedStringFromTableInBundle(@"Invalid number", @"Formatter",124 [NSBundle bundleForClass:[NSFormatter class]],125 @"Presented when user typed illegal characters: no valid object")]) {126 alertMessage = [NSString stringWithFormat:127 NSLocalizedString(@"%@ is not a valid entry for the %@ field.",128 @"Message text for alert posed by text field when invalid value entered"),129 string, label];130 alternateButtonString = nil;131 }132 133 contextInfo = [NSDictionary dictionaryWithObject: proposedValue forKey: @"proposedValue"];134 [contextInfo retain];135 NSBeep();136 NSBeginAlertSheet(alertMessage, defaultButtonString, alternateButtonString, otherButtonString, [self window],137 self, @selector(validationFailedSheetDidEnd:returnCode:contextInfo:), NULL, contextInfo,138 alertInformation);139 }140 141 - (void)_propagateValidationChange;142 {143 NSText *fieldEditor = [self currentEditor];144 NSDictionary *userInfo = nil;145 if (fieldEditor != nil) userInfo = [NSDictionary dictionaryWithObject: fieldEditor forKey: @"NSFieldEditor"];146 [[NSNotificationCenter defaultCenter] postNotificationName: NSControlTextDidChangeNotification object: self userInfo: userInfo];147 [self selectText: self];148 }149 150 - (void)validationFailedSheetDidEnd:(NSWindow *)sheet returnCode:(int)returnCode contextInfo:(void *)contextInfo {151 // modal delegate callback method for NSBeginAlertSheet() function; called in the above method152 if (returnCode == NSAlertOtherReturn) { // cancel153 [self abortEditing]; // abort edit session and reinstate original value154 [self _propagateValidationChange];155 } else if (returnCode == NSAlertAlternateReturn) { // set to min/max/default value156 [self setObjectValue: [(NSDictionary *)contextInfo objectForKey: @"proposedValue"]];157 [self validateEditing];158 [self _propagateValidationChange];159 }160 [(NSDictionary *)contextInfo release];161 }162 163 82 @end -
trunk/Cocoa/Pester/Source/NJRTableDelegate.m
r53 r364 225 225 @end 226 226 227 @implementation NJRTableDelegate (N JRTableViewDelegate)227 @implementation NJRTableDelegate (NSTableViewDelegate) 228 228 229 229 - (void)tableView:(NSTableView *)aTableView didClickTableColumn:(NSTableColumn *)inTableColumn … … 242 242 [self _positionTypeSelectDisplay]; 243 243 } 244 245 - (NSString *)tableView:(NSTableView *)aTableView toolTipForCell:(NSCell *)cell rect:(NSRectPointer)rect tableColumn:(NSTableColumn *)tc row:(int)rowIndex mouseLocation:(NSPoint)mouseLocation; 246 { 247 id dataSource = [aTableView dataSource]; 248 249 if ([dataSource respondsToSelector: @selector(toolTipForRow:)]) 250 return [dataSource toolTipForRow: rowIndex]; 251 252 return nil; 253 } 254 255 @end 256 257 @implementation NJRTableDelegate (NJRTableViewDelegate) 244 258 245 259 - (void)tableView:(NSTableView *)aTableView selectRowMatchingString:(NSString *)matchString; -
trunk/Cocoa/Pester/Source/NJRTableView.h
r53 r364 11 11 12 12 @interface NJRTableView : NSTableView { 13 NSMutableDictionary *toolTipRegionList;14 13 NSMutableString *typed; 15 14 IBOutlet id typeSelectDisplay; … … 30 29 31 30 - (void)removeSelectedRowsFromTableView:(NSTableView *)tableView; 32 - (NSString *)t ableView:(NSTableView *)aTableView toolTipForTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex;31 - (NSString *)toolTipForRow:(int)rowIndex; 33 32 34 33 @end -
trunk/Cocoa/Pester/Source/NJRTableView.m
r102 r364 17 17 18 18 @implementation NJRTableView 19 20 - (id)initWithCoder:(NSCoder *)aDecoder;21 {22 if ( (self = [super initWithCoder: aDecoder]) != nil) {23 toolTipRegionList = [[NSMutableDictionary alloc] initWithCapacity: 20];24 }25 return self;26 }27 28 - (void)dealloc;29 {30 [toolTipRegionList release];31 [super dealloc];32 }33 34 #pragma mark tool tips35 36 - (void)reloadData;37 {38 [toolTipRegionList removeAllObjects];39 [self removeAllToolTips];40 [super reloadData];41 }42 43 - (void)noteNumberOfRowsChanged;44 {45 [toolTipRegionList removeAllObjects];46 [self removeAllToolTips];47 [super noteNumberOfRowsChanged];48 }49 50 - (NSString *)_keyForColumn:(int)columnIndex row:(int)rowIndex;51 {52 return [NSString stringWithFormat:@"%d,%d", rowIndex, columnIndex];53 }54 55 - (NSString *)view:(NSView *)view stringForToolTip:(NSToolTipTag)tag point:(NSPoint)point userData:(void *)data;56 {57 // ask our data source for the tool tip58 if ([[self dataSource] respondsToSelector: @selector(tableView:toolTipForTableColumn:row:)]) {59 if ([self rowAtPoint: point] >= 0) return [[self dataSource] tableView: self toolTipForTableColumn: [[self tableColumns] objectAtIndex: [self columnAtPoint: point]] row: [self rowAtPoint: point]];60 }61 return nil;62 }63 64 - (NSRect)frameOfCellAtColumn:(int)columnIndex row:(int)rowIndex;65 {66 // this cell is apparently displayed, so we need to add a region for it67 NSNumber *toolTipTag;68 NSRect result = [super frameOfCellAtColumn: columnIndex row: rowIndex];69 // check if cell is already in the list70 NSString *cellKey = [self _keyForColumn: columnIndex row: rowIndex];71 // remove old region72 if (toolTipTag = [toolTipRegionList objectForKey: cellKey])73 [self removeToolTip: [toolTipTag intValue]];74 // add new region75 [toolTipRegionList setObject: [NSNumber numberWithInt: [self addToolTipRect: result owner: self userData: cellKey]] forKey: cellKey];76 return [super frameOfCellAtColumn: columnIndex row: rowIndex];77 }78 19 79 20 #pragma mark type selection … … 162 103 } 163 104 164 #pragma mark row coloring165 166 - (void)drawGridInClipRect:(NSRect)rect;167 {168 NSRange columnRange = [self columnsInRect: rect];169 int i;170 // match iTunesÕ grid color171 [[[NSColor gridColor] blendedColorWithFraction: 0.70 ofColor: [NSColor whiteColor]] set];172 for (i = columnRange.location ; i < NSMaxRange(columnRange) ; i++) {173 NSRect colRect = [self rectOfColumn: i];174 int rightEdge = (int) 0.5 + colRect.origin.x + colRect.size.width;175 [NSBezierPath strokeLineFromPoint: NSMakePoint(-0.5 + rightEdge, -0.5 + rect.origin.y)176 toPoint: NSMakePoint(-0.5 + rightEdge, -0.5 + rect.origin.y + rect.size.height)];177 }178 }179 180 - (void)highlightSelectionInClipRect:(NSRect)clipRect;181 {182 NSColor *evenColor, *oddColor = [self backgroundColor];183 float cellHeight = [self cellHeight];184 NSRect visibleRect = [self visibleRect];185 NSRect highlightRect;186 187 if ([NSColor respondsToSelector: @selector(alternateSelectedControlColor)])188 evenColor = [[NSColor alternateSelectedControlColor] highlightWithLevel:0.90];189 else // match iTunesÕ row background color190 evenColor = [NSColor colorWithCalibratedRed: 0.929 green: 0.953 blue: 0.996 alpha:1.0];191 192 highlightRect.origin = NSMakePoint(NSMinX(visibleRect), (int)(NSMinY(clipRect) / cellHeight) * cellHeight);193 highlightRect.size = NSMakeSize(NSWidth(visibleRect), cellHeight);194 195 while (NSMinY(highlightRect) < NSMaxY(clipRect)) {196 NSRect clippedHighlightRect = NSIntersectionRect(highlightRect, clipRect);197 int row = (int)((NSMinY(highlightRect) + cellHeight / 2.0) / cellHeight);198 NSColor *rowColor = (row % 2 == 0) ? evenColor : oddColor;199 [rowColor set];200 NSRectFill(clippedHighlightRect);201 highlightRect.origin.y += cellHeight;202 }203 204 [super highlightSelectionInClipRect: clipRect];205 }206 207 105 @end -
trunk/Cocoa/Pester/Source/NJRVoicePopUpButton.h
r53 r364 8 8 9 9 #import <AppKit/AppKit.h> 10 #import "SUSpeaker.h"11 10 12 11 @interface NJRVoicePopUpButton : NSPopUpButton { 13 12 id _delegate; 14 SUSpeaker *_speaker;13 NSSpeechSynthesizer *_speaker; 15 14 } 16 15 -
trunk/Cocoa/Pester/Source/NJRVoicePopUpButton.m
r355 r364 15 15 NSMenu *menu; 16 16 NSMenuItem *item; 17 NSArray *voice Names = [SUSpeaker voiceNames];17 NSArray *voices = [NSSpeechSynthesizer availableVoices]; 18 18 19 19 [self removeAllItems]; … … 24 24 [item setEnabled: NO]; 25 25 [menu addItem: [NSMenuItem separatorItem]]; 26 if (voice Names == nil || [voiceNames count] == 0) {26 if (voices == nil || [voices count] == 0) { 27 27 item = [menu addItemWithTitle: NSLocalizedString(@"Can't locate voices", "Voice popup menu item surrogate for voice list if no voices are found") action: nil keyEquivalent: @""]; 28 28 [item setEnabled: NO]; 29 29 } else { 30 NSEnumerator *e = [voiceNames objectEnumerator]; 31 NSString *voiceName; 32 while ( (voiceName = [e nextObject]) != nil) { 33 item = [menu addItemWithTitle: voiceName action: @selector(_previewVoice) keyEquivalent: @""]; 30 NSEnumerator *e = [voices objectEnumerator]; 31 NSString *voice; 32 while ( (voice = [e nextObject]) != nil) { 33 item = [menu addItemWithTitle: 34 [[NSSpeechSynthesizer attributesForVoice: voice] objectForKey: NSVoiceName] 35 action: @selector(_previewVoice) keyEquivalent: @""]; 36 [item setRepresentedObject: voice]; 34 37 [item setTarget: self]; 35 38 } 36 39 } 37 if (_speaker == nil) [self selectItemWithTitle: [SUSpeaker defaultVoice]]; 40 if (_speaker == nil) 41 [self selectItemAtIndex: [menu indexOfItemWithRepresentedObject: [NSSpeechSynthesizer defaultVoice]]]; 38 42 } 39 43 … … 54 58 } 55 59 56 - ( SUSpeaker *)_speaker;60 - (NSSpeechSynthesizer *)_speaker; 57 61 { 58 if (_speaker == nil) _speaker = [[ SUSpeaker alloc] init];62 if (_speaker == nil) _speaker = [[NSSpeechSynthesizer alloc] initWithVoice: nil]; 59 63 return _speaker; 60 64 } … … 68 72 - (void)setVoice:(NSString *)voice; 69 73 { 70 int voiceIdx = [self indexOfItemWith Title: voice];74 int voiceIdx = [self indexOfItemWithRepresentedObject: voice]; 71 75 if (voiceIdx == -1) { 72 76 [self _invalidateVoiceSelection]; … … 78 82 - (void)_previewVoice; 79 83 { 80 NSString *voice Name = [self titleOfSelectedItem];84 NSString *voice = [[self selectedItem] representedObject]; 81 85 NSString *previewString = nil; 82 VoiceSpec voice;83 OSStatus err = noErr;84 VoiceDescription info;85 short voiceIndex = [[SUSpeaker voiceNames] indexOfObject: voiceName] + 1;86 86 87 87 [_speaker stopSpeaking]; 88 88 89 if ( (err = GetIndVoice(voiceIndex, &voice)) != noErr) { 90 NSBeginAlertSheet(@"Voice not available", nil, nil, nil, [self window], nil, nil, nil, nil, NSLocalizedString(@"The voice '%@' you selected could not be used. An error of type %ld occurred while attempting to retrieve voice information.", "Message displayed in alert sheet when GetIndVoice returns an error"), voiceName, err); 89 if (![[self _speaker] setVoice: voice]) { 90 // XXX localize title 91 NSBeginAlertSheet(@"Voice not available", nil, nil, nil, [self window], nil, nil, nil, nil, NSLocalizedString(@"The voice '%@' you selected could not be used.", "Message displayed in alert sheet when -[NSSpeechSynthesizer setVoice:] returns an error"), [self titleOfSelectedItem]); 91 92 [self _invalidateVoiceSelection]; 92 93 return; … … 94 95 95 96 if (_delegate != nil && [_delegate respondsToSelector: @selector(voicePopUpButton:previewStringForVoice:)]) { 96 previewString = [_delegate voicePopUpButton: self previewStringForVoice: voice Name];97 previewString = [_delegate voicePopUpButton: self previewStringForVoice: voice]; 97 98 } 98 99 99 if (previewString == nil) { 100 err = GetVoiceDescription(&voice, &info, sizeof(info)); 101 if (err != noErr || info.comment[0] == 0) 102 previewString = voiceName; 103 else { 104 previewString = (NSString *)CFStringCreateWithPascalString(NULL, info.comment, kCFStringEncodingMacRoman); 105 [previewString autorelease]; 106 } 107 } 100 if (previewString == nil) 101 previewString = [[NSSpeechSynthesizer attributesForVoice: voice] objectForKey: NSVoiceDemoText]; 108 102 109 [[self _speaker] setVoice: voiceIndex]; 110 [_speaker speakText: previewString]; 103 [_speaker startSpeakingString: previewString]; 111 104 } 112 105 -
trunk/Cocoa/Pester/Source/PSAlarm.m
r358 r364 357 357 358 358 [string appendAttributedString: 359 [[NSString stringWithFormat: NSLocalizedString(@"At alarm time for %@:\n", "Alert list title in pretty description, %@ replaced with message"), [self message]] small]];359 [[NSString stringWithFormat: NSLocalizedString(@"At alarm time for '%@':\n", "Alert list title in pretty description, %@ replaced with message"), [self message]] small]]; 360 360 if (alertList != nil) { 361 361 [string appendAttributedString: alertList]; … … 415 415 // don't want to put this logic in setTimer or isValid because it can cause invalid alarms to be set (consider when someone clicks the "repeat" checkbox, then switches to a [nonrepeating, by design] date alarm, and enters a date that has passed: we do -not- want the alarm to magically morph into a repeating interval alarm) 416 416 NSTimeInterval savedInterval = alarmInterval; 417 if (![self setTimer]) { 417 if ([self setTimer]) { 418 // alarm is set, but not repeating - and the interval is wrong because it was computed from the date 419 alarmInterval = savedInterval; 420 [self setRepeating: YES]; 421 } else { 422 // alarm is now invalid: expired in the past, so we start the timer over again 423 // We could potentially start counting from the expiration date (or expiration date + n * interval), but this doesn't match our existing behavior. 418 424 alarmType = PSAlarmInterval; 419 425 [self setInterval: savedInterval]; … … 563 569 } 564 570 [self setMessage: [coder decodeObject]]; 565 if (alarmType == PSAlarmSet) {571 if (alarmType == PSAlarmSet) 566 572 alarmType = PSAlarmDate; 567 [self setTimer]; 568 } 573 // Note: the timer is not set here, so these alarms are inert. 574 // This helps make importing atomic (see -[PSAlarms importVersion1Alarms]) 569 575 } 570 576 return self; -
trunk/Cocoa/Pester/Source/PSAlarmSetController.h
r361 r364 13 13 @class NJRIntervalField; 14 14 @class NJRQTMediaPopUpButton; 15 @class NJRValidatingField; 15 16 @class NJRVoicePopUpButton; 16 17 … … 34 35 IBOutlet NJRQTMediaPopUpButton *sound; 35 36 IBOutlet NSButton *soundVolumeButton; 36 IBOutlet N STextField *soundRepetitions;37 IBOutlet NJRValidatingField *soundRepetitions; 37 38 IBOutlet NSStepper *soundRepetitionStepper; 38 39 IBOutlet NSTextField *soundRepetitionsLabel; -
trunk/Cocoa/Pester/Source/PSAlarmSetController.m
r363 r364 18 18 #import "NJRQTMediaPopUpButton.h" 19 19 #import "NJRSoundManager.h" 20 #import "NJRValidatingField.h" 20 21 #import "NJRVoicePopUpButton.h" 21 22 #import "NSString-NJRExtensions.h" … … 87 88 { 88 89 NSDictionary *plAlerts = [defaults dictionaryForKey: PSAlertsSelected]; 89 PSAlerts *alerts ;90 PSAlerts *alerts = nil; 90 91 if (plAlerts == nil) { 91 92 alerts = [[PSAlerts alloc] initWithPesterVersion1Alerts]; 92 93 } else { 93 NS_DURING94 @try { 94 95 alerts = [[PSAlerts alloc] initWithPropertyList: plAlerts]; 95 NS_HANDLER 96 NSRunAlertPanel(@"Unable to restore alerts", @"Pester could not restore recent alert information for one or more alerts in the Set Alarm window. The default set of alerts will be used instead.\n\n%@", nil, nil, nil, [ localException reason]);96 } @catch (NSException *exception) { 97 NSRunAlertPanel(@"Unable to restore alerts", @"Pester could not restore recent alert information for one or more alerts in the Set Alarm window. The default set of alerts will be used instead.\n\n%@", nil, nil, nil, [exception reason]); 97 98 alerts = [[PSAlerts alloc] initWithPesterVersion1Alerts]; 98 NS_ENDHANDLER99 } 99 100 } 100 101 [self _readAlerts: alerts]; … … 199 200 old = [inAtMatrix cellWithTag: isInterval]; 200 201 NSAssert(new != old, @"in and at buttons should be distinct!"); 202 203 if (sender != nil) { 204 // XXX validation doesn't work properly for date/time, so we just universally cancel editing now 205 if (![[self window] makeFirstResponder: nil] && !isInterval) { 206 // This works fine synchronously only if you're using the keyboard shortcut to switch in/at. Directly activating the button, a delayed invocation is necessary. 207 NSInvocation *i = [NSInvocation invocationWithMethodSignature: 208 [inAtMatrix methodSignatureForSelector: @selector(selectCellWithTag:)]]; 209 int tag = [old tag]; 210 [i setSelector: @selector(selectCellWithTag:)]; 211 [i setTarget: inAtMatrix]; 212 [i setArgument: &tag atIndex: 2]; 213 [NSTimer scheduledTimerWithTimeInterval: 0 invocation: i repeats: NO]; 214 return; 215 } 216 } 217 201 218 [old setKeyEquivalent: [new keyEquivalent]]; 202 219 [old setKeyEquivalentModifierMask: [new keyEquivalentModifierMask]]; … … 211 228 [timeCalendarButton setEnabled: !isInterval]; 212 229 if (sender != nil) 213 214 if (!isInterval) {// need to do this every time the controls are enabled230 [[self window] makeFirstResponder: isInterval ? (NSTextField *)timeInterval : timeOfDay]; 231 if (!isInterval) // need to do this every time the controls are enabled 215 232 [timeOfDay setNextKeyView: timeDate]; 216 }217 233 // NSLog(@"UPDATING FROM inAtChanged"); 218 234 [self update: nil]; … … 337 353 { 338 354 BOOL playSoundSelected = [playSound intValue]; 339 BOOL canRepeat = playSoundSelected ? [sound canRepeat] : NO;340 [sound setEnabled: NO]; //playSoundSelected]; // XXX temporary for 1.1b5355 BOOL canRepeat = playSoundSelected; // ? [sound canRepeat] : NO; // XXX temporary for 1.1b6 356 [sound setEnabled: playSoundSelected]; 341 357 [soundRepetitions setEnabled: canRepeat]; 342 358 [soundVolumeButton setEnabled: canRepeat && [sound hasAudio]]; … … 344 360 [soundRepetitionsLabel setTextColor: canRepeat ? [NSColor controlTextColor] : [NSColor disabledControlTextColor]]; 345 361 if (playSoundSelected && sender == playSound) { 346 [[self window] makeFirstResponder: sound ];362 [[self window] makeFirstResponder: soundRepetitions]; // sound]; // XXX temporary for 1.1b6 347 363 } 348 364 } … … 437 453 438 454 [alerts removeAlerts]; 439 NS_DURING455 @try { 440 456 // dock bounce alert 441 457 if ([bounceDockIcon state] == NSOnState) … … 467 483 // speech alert 468 484 if ([doSpeak intValue]) 469 [alerts addAlert: [PSSpeechAlert alertWithVoice: [ voice titleOfSelectedItem]]];485 [alerts addAlert: [PSSpeechAlert alertWithVoice: [[voice selectedItem] representedObject]]]; 470 486 // wake alert 471 487 if ([wakeUp intValue]) 472 488 [alerts addAlert: [PSWakeAlert alert]]; 473 489 [[NSUserDefaults standardUserDefaults] setObject: [alerts propertyListRepresentation] forKey: PSAlertsSelected]; 474 NS_HANDLER475 [self setStatus: [localException reason]];476 NS_VALUERETURN(NO, BOOL);477 NS_ENDHANDLER490 } @catch (NSException *exception) { 491 [self setStatus: [exception reason]]; 492 return NO; 493 } 478 494 return YES; 479 495 } … … 540 556 if (control == timeInterval) 541 557 [timeInterval handleDidFailToFormatString: string errorDescription: error label: @"alarm interval"]; 558 else if (control == soundRepetitions) 559 [soundRepetitions handleDidFailToFormatString: string errorDescription: error label: @"alert repetitions"]; 542 560 return NO; 543 561 } -
trunk/Cocoa/Pester/Source/PSAlarms.m
r357 r364 178 178 unsigned indexCount = [indices count], i = 0, alarmIndex; 179 179 unsigned *indexArray = (unsigned *)malloc(indexCount * sizeof(unsigned)); 180 NS_DURING180 @try { 181 181 while ( (n = [e nextObject]) != nil) { 182 182 alarmIndex = [n intValue]; … … 186 186 } 187 187 [alarms removeObjectsFromIndices: indexArray numIndices: indexCount]; 188 } @finally { 188 189 free(indexArray); indexArray = NULL; 189 190 [self _changed]; 190 NS_HANDLER 191 free(indexArray); 192 [self _changed]; 193 [localException raise]; 194 NS_ENDHANDLER 191 } 195 192 } 196 193 … … 314 311 NSData *alarmData; 315 312 PSAlarm *alarm; 316 while ( (alarmData = [e nextObject]) != nil) { 317 NS_DURING 318 alarm = [NSUnarchiver unarchiveObjectWithData: alarmData]; 319 NS_HANDLER 320 alarm = nil; 321 // XXX 322 NS_ENDHANDLER 323 if (alarm != nil) 324 [alarms addObject: alarm]; 313 NSMutableArray *importedAlarms = [[NSMutableArray alloc] initWithCapacity: [alarmsData count]]; 314 @try { 315 while ( (alarmData = [e nextObject]) != nil) { 316 alarm = [NSUnarchiver unarchiveObjectWithData: alarmData]; 317 if (alarm == nil) 318 @throw [NSException exceptionWithName: NSInternalInconsistencyException reason: @"Failed to decode Pester 1.0 alarm." userInfo: nil]; 319 [importedAlarms addObject: alarm]; 320 if (![alarm setTimer]) // expired 321 [alarms addObject: alarm]; 322 } 323 } @catch (NSException *exception) { 324 [self removeAlarms: [NSSet setWithArray: importedAlarms]]; 325 @throw; 326 } @finally { 327 [importedAlarms release]; 325 328 } 326 329 } -
trunk/Cocoa/Pester/Source/PSAlarmsController.m
r355 r364 121 121 } 122 122 123 - (NSString *)t ableView:(NSTableView *)aTableView toolTipForTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex;123 - (NSString *)toolTipForRow:(int)rowIndex; 124 124 { 125 125 PSAlarm *alarm = [reorderedAlarms objectAtIndex: rowIndex]; 126 126 127 127 return [[alarm prettyDescription] string]; 128 128 } -
trunk/Cocoa/Pester/Source/PSAlerts.m
r361 r364 132 132 { 133 133 if ( (self = [self init]) != nil) { 134 NSArray *plAlerts = [dict objectForKey: PLAlerts]; 135 NSEnumerator *e = [plAlerts objectEnumerator]; 136 NSDictionary *alertDict; 137 while ( (alertDict = [e nextObject]) != nil) { 138 [self addAlert: [[PSAlert alloc] initWithPropertyList: alertDict]]; 139 } 134 @try { 135 NSArray *plAlerts = [dict objectForKey: PLAlerts]; 136 NSEnumerator *e = [plAlerts objectEnumerator]; 137 NSDictionary *alertDict; 138 while ( (alertDict = [e nextObject]) != nil) { 139 [self addAlert: [[PSAlert alloc] initWithPropertyList: alertDict]]; 140 } 141 } @catch (NSException *e) { 142 [self release]; 143 @throw; 144 } 140 145 } 141 146 return self; -
trunk/Cocoa/Pester/Source/PSApplication.m
r133 r364 215 215 switch (answer) { 216 216 case NSAlertDefaultReturn: 217 NS_DURING217 @try { 218 218 [allAlarms importVersion1Alarms]; 219 NS_HANDLER220 NSRunAlertPanel(@"Error occurred importing alarms", @"Pester was unable to convert some alarms created with an older version. Those alarms which could be read have been converted. The previous-format alarms have been retained; try using an older version of Pester to read them.\n\n%@", nil, nil, nil, [ localException reason]);221 NS_VOIDRETURN;222 NS_ENDHANDLER219 } @catch (NSException *exception) { 220 NSRunAlertPanel(@"Error occurred importing alarms", @"Pester was unable to convert some alarms created with an older version. Those alarms which could be read have been converted. The previous-format alarms have been retained; try using an older version of Pester to read them.\n\n%@", nil, nil, nil, [exception reason]); 221 return; 222 } 223 223 case NSAlertAlternateReturn: 224 224 [allAlarms discardVersion1Alarms]; -
trunk/Cocoa/Pester/Source/PSMediaAlert.m
r133 r364 23 23 { 24 24 if ( (self = [super init]) != nil) { 25 repetitions = numReps; 25 // XXX not DRY, but can't think of a more sensible way 26 if (numReps < 1) 27 numReps = 1; 28 else if (numReps > 99) 29 numReps = 99; 30 repetitions = numReps; 26 31 } 27 32 return self; -
trunk/Cocoa/Pester/Source/PSSpeechAlert.h
r61 r364 9 9 #import "PSAlert.h" 10 10 11 @class SUSpeaker;12 13 11 @interface PSSpeechAlert : PSAlert { 14 SUSpeaker *speaker;12 NSSpeechSynthesizer *speaker; 15 13 NSString *voice; 16 14 PSAlarm *alarm; -
trunk/Cocoa/Pester/Source/PSSpeechAlert.m
r102 r364 10 10 #import "PSAlarmAlertController.h" 11 11 #import "NSDictionary-NJRExtensions.h" 12 #import "SUSpeaker.h"13 12 14 13 // property list keys … … 52 51 [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(_stopSpeaking:) name: PSAlarmAlertStopNotification object: nil]; 53 52 54 if ( (speaker = [[ SUSpeaker alloc] init]) == nil) return;53 if ( (speaker = [[NSSpeechSynthesizer alloc] initWithVoice: voice]) == nil) return; 55 54 alarm = anAlarm; 56 55 [speaker setDelegate: self]; 57 unsigned voiceIndex = [[SUSpeaker voiceNames] indexOfObject: voice]; 58 if (voiceIndex == NSNotFound) 59 voiceIndex = [[SUSpeaker voiceNames] indexOfObject: [SUSpeaker defaultVoice]]; 60 [speaker setVoice: voiceIndex + 1]; 61 [speaker speakText: [alarm message]]; 56 [speaker startSpeakingString: [alarm message]]; 62 57 } 63 58 … … 74 69 { 75 70 NSMutableDictionary *plAlert = [[super propertyListRepresentation] mutableCopy]; 71 if (voice == nil) 72 @throw [NSException exceptionWithName: NSInvalidArgumentException 73 reason: @"The selected voice is not available." userInfo: nil]; 76 74 [plAlert setObject: voice forKey: PLAlertVoice]; 77 75 return [plAlert autorelease]; … … 88 86 @end 89 87 90 @implementation PSSpeechAlert ( SUSpeakerDelegate)88 @implementation PSSpeechAlert (NSSpeechSynthesizerDelegate) 91 89 92 - (void) didFinishSpeaking:(SUSpeaker *)aSpeaker;90 - (void)speechSynthesizer:(NSSpeechSynthesizer *)sender didFinishSpeaking:(BOOL)finishedSpeaking; 93 91 { 94 92 [self completedForAlarm: alarm]; -
trunk/Cocoa/Pester/Source/PSTimer.m
r355 r364 230 230 if ([date timeIntervalSinceNow] > 30) { 231 231 // NSLog(@"going to sleep, setting timer %@", PSTimerOnWake); 232 NS_DURING 232 @try { 233 233 [PSPowerManager setWakeTime: [[PSTimerOnWake fireDate] addTimeInterval: -15]]; 234 NS_HANDLER 235 [self performSelectorOnMainThread: @selector(_runScheduledWakeErrorPanel:) withObject: [localException description] waitUntilDone: YES]; 236 NS_ENDHANDLER 234 } @catch (NSException *exception) { 235 [self performSelectorOnMainThread: @selector(_runScheduledWakeErrorPanel:) 236 withObject: [exception description] waitUntilDone: YES]; 237 } 237 238 return YES; 238 239 } else { -
trunk/Cocoa/Pester/Source/Pester.xcodeproj/nicholas.mode2v3
r363 r364 230 230 <array> 231 231 <dict> 232 <key>BecomeActive</key> 233 <true/> 232 234 <key>ContentConfiguration</key> 233 235 <dict> … … 259 261 <string>29B97314FDCFA39411CA2CEA</string> 260 262 <string>080E96DDFE201D6D7F000001</string> 263 <string>F560E311035787D501A4E466</string> 264 <string>F560E314035787F901A4E466</string> 265 <string>F59E47AF036AAC31016B311C</string> 266 <string>F560E312035787E001A4E466</string> 261 267 <string>29B97317FDCFA39411CA2CEA</string> 268 <string>E10E71F3040C335800050002</string> 269 <string>E19DCBE503BE516000B934BF</string> 262 270 <string>E17562BC0CF8E7A800FC5057</string> 263 271 </array> … … 265 273 <array> 266 274 <array> 267 <integer>1</integer> 275 <integer>110</integer> 276 <integer>108</integer> 268 277 <integer>0</integer> 269 278 </array> 270 279 </array> 271 280 <key>PBXSmartGroupTreeModuleOutlineStateVisibleRectKey</key> 272 <string>{{0, 0}, {334, 441}}</string>281 <string>{{0, 1497}, {334, 441}}</string> 273 282 </dict> 274 283 <key>PBXTopSmartGroupGIDs</key> … … 289 298 </array> 290 299 <key>RubberWindowFrame</key> 291 <string>1570 6 51351 527 0 0 1920 1178 </string>300 <string>1570 647 351 527 0 0 1920 1178 </string> 292 301 </dict> 293 302 <key>Module</key> … … 329 338 <array> 330 339 <array> 331 <integer> 2</integer>340 <integer>0</integer> 332 341 </array> 333 342 </array> … … 429 438 <key>TableOfContents</key> 430 439 <array> 431 <string>E1 F961A10CF9F8E70087C980</string>432 <string>E1 F961A20CF9F8E70087C980</string>440 <string>E15045D00CFCF47100DE47E9</string> 441 <string>E15045D10CFCF47100DE47E9</string> 433 442 <string>1C9437FD063B20B00039CFAC</string> 434 443 <string>1C9437FE063B20B00039CFAC</string> … … 463 472 <key>WindowOrderList</key> 464 473 <array> 474 <string>E1B123120CF664D6004975AA</string> 465 475 <string>/Users/nicholas/Documents/Development/Pester/Source/Pester.xcodeproj</string> 466 <string>E1B123120CF664D6004975AA</string>467 476 </array> 468 477 <key>WindowString</key> 469 <string>1570 6 51351 527 0 0 1920 1178 </string>478 <string>1570 647 351 527 0 0 1920 1178 </string> 470 479 <key>WindowToolsV3</key> 471 480 <array> … … 620 629 <array> 621 630 <dict> 631 <key>BecomeActive</key> 632 <true/> 622 633 <key>ContentConfiguration</key> 623 634 <dict> … … 625 636 <string>1CD0528F0623707200166675</string> 626 637 <key>PBXProjectModuleLabel</key> 627 <string> </string>638 <string>NJRValidatingField.h</string> 628 639 <key>StatusBarVisibility</key> 629 640 <true/> … … 642 653 </dict> 643 654 <dict> 644 <key>BecomeActive</key>645 <true/>646 655 <key>ContentConfiguration</key> 647 656 <dict> … … 683 692 <array> 684 693 <string>1C530D52069F1CE1000CFCEE</string> 685 <string>E1 75647E0CF9EA4700FC5057</string>694 <string>E15043790CFB91AF00DE47E9</string> 686 695 <string>1CD0528F0623707200166675</string> 687 696 <string>XCMainBuildResultsModuleGUID</string> … … 725 734 <key>sizes</key> 726 735 <array> 727 <string>{{0, 0}, {445, 3 80}}</string>728 <string>{{445, 0}, {536, 3 80}}</string>736 <string>{{0, 0}, {445, 368}}</string> 737 <string>{{445, 0}, {536, 368}}</string> 729 738 </array> 730 739 </dict> … … 741 750 <key>sizes</key> 742 751 <array> 743 <string>{{0, 0}, {981, 3 80}}</string>744 <string>{{0, 3 80}, {981, 338}}</string>752 <string>{{0, 0}, {981, 368}}</string> 753 <string>{{0, 368}, {981, 350}}</string> 745 754 </array> 746 755 </dict> … … 775 784 </array> 776 785 <key>Frame</key> 777 <string>{{445, 0}, {536, 3 80}}</string>786 <string>{{445, 0}, {536, 368}}</string> 778 787 <key>RubberWindowFrame</key> 779 <string> 491 171981 759 0 0 1920 1178 </string>788 <string>843 200 981 759 0 0 1920 1178 </string> 780 789 </dict> 781 790 <key>RubberWindowFrame</key> 782 <string> 491 171981 759 0 0 1920 1178 </string>791 <string>843 200 981 759 0 0 1920 1178 </string> 783 792 </dict> 784 793 <key>Module</key> … … 803 812 <array> 804 813 <string>1C530D54069F1CE1000CFCEE</string> 805 <string>E1 7564230CF9EA2400FC5057</string>814 <string>E15043670CFB8D4800DE47E9</string> 806 815 <string>1C162984064C10D400B95A72</string> 807 <string>E1 7564240CF9EA2400FC5057</string>808 <string>E1 7564250CF9EA2400FC5057</string>809 <string>E1 7564260CF9EA2400FC5057</string>810 <string>E1 7564270CF9EA2400FC5057</string>811 <string>E1 7564280CF9EA2400FC5057</string>816 <string>E15043680CFB8D4800DE47E9</string> 817 <string>E15043690CFB8D4800DE47E9</string> 818 <string>E150436A0CFB8D4800DE47E9</string> 819 <string>E150436B0CFB8D4800DE47E9</string> 820 <string>E150436C0CFB8D4800DE47E9</string> 812 821 </array> 813 822 <key>ToolbarConfiguration</key> 814 823 <string>xcode.toolbar.config.debugV3</string> 815 824 <key>WindowString</key> 816 <string> 491 171981 759 0 0 1920 1178 </string>825 <string>843 200 981 759 0 0 1920 1178 </string> 817 826 <key>WindowToolGUID</key> 818 827 <string>1C530D54069F1CE1000CFCEE</string> … … 841 850 <string>1CDD528C0622207200134675</string> 842 851 <key>PBXProjectModuleLabel</key> 843 <string> <No Editor></string>852 <string>PSApplication.m</string> 844 853 <key>StatusBarVisibility</key> 845 854 <true/> … … 848 857 <dict> 849 858 <key>Frame</key> 850 <string>{{0, 0}, {878, 347}}</string>859 <string>{{0, 0}, {878, 241}}</string> 851 860 <key>RubberWindowFrame</key> 852 <string> 47 178878 716 0 0 1920 1178 </string>861 <string>619 85 878 716 0 0 1920 1178 </string> 853 862 </dict> 854 863 <key>Module</key> … … 859 868 </array> 860 869 <key>Proportion</key> 861 <string>347pt</string> 862 </dict> 863 <dict> 870 <string>241pt</string> 871 </dict> 872 <dict> 873 <key>BecomeActive</key> 874 <true/> 864 875 <key>ContentConfiguration</key> 865 876 <dict> … … 872 883 <dict> 873 884 <key>Frame</key> 874 <string>{{0, 352}, {878, 323}}</string>885 <string>{{0, 246}, {878, 429}}</string> 875 886 <key>RubberWindowFrame</key> 876 <string> 47 178878 716 0 0 1920 1178 </string>887 <string>619 85 878 716 0 0 1920 1178 </string> 877 888 </dict> 878 889 <key>Module</key> 879 890 <string>PBXProjectFindModule</string> 880 891 <key>Proportion</key> 881 <string> 323pt</string>892 <string>429pt</string> 882 893 </dict> 883 894 </array> … … 897 908 <array> 898 909 <string>1C530D57069F1CE1000CFCEE</string> 899 <string>E1 7564860CF9F5F400FC5057</string>900 <string>E1 7564870CF9F5F400FC5057</string>910 <string>E15043970CFBA77500DE47E9</string> 911 <string>E15043980CFBA77500DE47E9</string> 901 912 <string>1CDD528C0622207200134675</string> 902 913 <string>1CD0528E0623707200166675</string> 903 914 </array> 904 915 <key>WindowString</key> 905 <string> 47 178878 716 0 0 1920 1178 </string>916 <string>619 85 878 716 0 0 1920 1178 </string> 906 917 <key>WindowToolGUID</key> 907 918 <string>1C530D57069F1CE1000CFCEE</string> … … 938 949 <dict> 939 950 <key>Frame</key> 940 <string>{{0, 0}, { 915, 284}}</string>951 <string>{{0, 0}, {1144, 216}}</string> 941 952 <key>RubberWindowFrame</key> 942 <string> 447 136 915 3250 0 1920 1178 </string>953 <string>677 91 1144 257 0 0 1920 1178 </string> 943 954 </dict> 944 955 <key>Module</key> 945 956 <string>PBXDebugCLIModule</string> 946 957 <key>Proportion</key> 947 <string>2 84pt</string>958 <string>216pt</string> 948 959 </dict> 949 960 </array> 950 961 <key>Proportion</key> 951 <string>2 84pt</string>962 <string>216pt</string> 952 963 </dict> 953 964 </array> … … 963 974 <array> 964 975 <string>1C530D5B069F1CE1000CFCEE</string> 965 <string>E1 7564290CF9EA2400FC5057</string>976 <string>E150436D0CFB8D4800DE47E9</string> 966 977 <string>1C78EAAC065D492600B07095</string> 967 978 </array> … … 969 980 <string>xcode.toolbar.config.consoleV3</string> 970 981 <key>WindowString</key> 971 <string> 447 136 915 3250 0 1920 1178 </string>982 <string>677 91 1144 257 0 0 1920 1178 </string> 972 983 <key>WindowToolGUID</key> 973 984 <string>1C530D5B069F1CE1000CFCEE</string> … … 1034 1045 <dict> 1035 1046 <key>Frame</key> 1036 <string>{{0, 0}, {5 45, 0}}</string>1047 <string>{{0, 0}, {586, 0}}</string> 1037 1048 <key>RubberWindowFrame</key> 1038 <string>9 34 569 545 2830 0 1920 1178 </string>1049 <string>960 488 586 680 0 0 1920 1178 </string> 1039 1050 </dict> 1040 1051 <key>Module</key> … … 1054 1065 <key>PBXCVSModuleTreeModuleColumnWidthsKey</key> 1055 1066 <array> 1056 <real>2 16</real>1067 <real>257</real> 1057 1068 <real>40.66162109375</real> 1058 1069 <real>53</real> … … 1075 1086 <key>PBXProjectModuleLabel</key> 1076 1087 <string>SCM Results</string> 1077 <key>SCMActivityViewerShowingDefaultKey</key>1078 <string>{{0, 237}, {545, 0}}</string>1079 1088 </dict> 1080 1089 <key>GeometryConfiguration</key> 1081 1090 <dict> 1082 1091 <key>Frame</key> 1083 <string>{{0, 5}, {5 45, 237}}</string>1092 <string>{{0, 5}, {586, 634}}</string> 1084 1093 <key>RubberWindowFrame</key> 1085 <string>9 34 569 545 2830 0 1920 1178 </string>1094 <string>960 488 586 680 0 0 1920 1178 </string> 1086 1095 </dict> 1087 1096 <key>Module</key> 1088 1097 <string>PBXCVSModule</string> 1089 1098 <key>Proportion</key> 1090 <string> 237pt</string>1099 <string>634pt</string> 1091 1100 </dict> 1092 1101 </array> 1093 1102 <key>Proportion</key> 1094 <string> 242pt</string>1103 <string>639pt</string> 1095 1104 </dict> 1096 1105 </array> … … 1106 1115 <array> 1107 1116 <string>E1B123120CF664D6004975AA</string> 1108 <string>E1 F961A30CF9F8E70087C980</string>1117 <string>E150465E0CFCFB0200DE47E9</string> 1109 1118 <string>1C78EAB2065D492600B07095</string> 1110 1119 <string>1CD052920623707200166675</string> … … 1113 1122 <string>xcode.toolbar.config.scm</string> 1114 1123 <key>WindowString</key> 1115 <string>9 34 569 545 2830 0 1920 1178 </string>1124 <string>960 488 586 680 0 0 1920 1178 </string> 1116 1125 <key>WindowToolGUID</key> 1117 1126 <string>E1B123120CF664D6004975AA</string> … … 1234 1243 <key>TableOfContents</key> 1235 1244 <array> 1236 <string>E1 B1236F0CF67A4B004975AA</string>1237 <string>E1 B123700CF67A4B004975AA</string>1245 <string>E15043BB0CFCC31200DE47E9</string> 1246 <string>E15043BC0CFCC31200DE47E9</string> 1238 1247 <string>1CE0B1FE06471DED0097A5F4</string> 1239 1248 <string>1CA1AED706398EBD00589147</string> … … 1244 1253 <string>290 117 744 409 0 0 1920 1178 </string> 1245 1254 <key>WindowToolGUID</key> 1246 <string>E1 B1236F0CF67A4B004975AA</string>1255 <string>E15043BB0CFCC31200DE47E9</string> 1247 1256 <key>WindowToolIsVisible</key> 1248 1257 <false/> … … 1427 1436 </dict> 1428 1437 <dict> 1438 <key>FirstTimeWindowDisplayed</key> 1439 <false/> 1429 1440 <key>Identifier</key> 1430 1441 <string>windowTool.refactoring</string> 1431 1442 <key>IncludeInToolsMenu</key> 1432 1443 <integer>0</integer> 1444 <key>IsVertical</key> 1445 <true/> 1433 1446 <key>Layout</key> 1434 1447 <array> … … 1437 1450 <array> 1438 1451 <dict> 1439 <key>BecomeActive</key> 1440 <integer>1</integer> 1452 <key>ContentConfiguration</key> 1453 <dict> 1454 <key>PBXProjectModuleGUID</key> 1455 <string>E15044550CFCDC1D00DE47E9</string> 1456 </dict> 1441 1457 <key>GeometryConfiguration</key> 1442 1458 <dict> 1443 1459 <key>Frame</key> 1444 <string>{ 0, 0}, {500, 335}</string>1460 <string>{{0, 0}, {891, 710}}</string> 1445 1461 <key>RubberWindowFrame</key> 1446 <string>{0, 0}, {500, 335}</string> 1462 <string>371 185 891 751 0 0 1920 1178 </string> 1463 <key>XCRefactoringSplitViewLowerHeight</key> 1464 <real>310</real> 1465 <key>XCRefactoringSplitViewTotalHeight</key> 1466 <real>627</real> 1447 1467 </dict> 1448 1468 <key>Module</key> 1449 1469 <string>XCRefactoringModule</string> 1450 1470 <key>Proportion</key> 1451 <string> 100%</string>1471 <string>710pt</string> 1452 1472 </dict> 1453 1473 </array> 1454 1474 <key>Proportion</key> 1455 <string> 100%</string>1475 <string>710pt</string> 1456 1476 </dict> 1457 1477 </array> … … 1462 1482 <string>XCRefactoringModule</string> 1463 1483 </array> 1484 <key>StatusbarIsVisible</key> 1485 <true/> 1486 <key>TableOfContents</key> 1487 <array> 1488 <string>E15044560CFCDC1D00DE47E9</string> 1489 <string>E15044570CFCDC1D00DE47E9</string> 1490 <string>E15044550CFCDC1D00DE47E9</string> 1491 </array> 1464 1492 <key>WindowString</key> 1465 <string>200 200 500 356 0 0 1920 1200 </string> 1493 <string>371 185 891 751 0 0 1920 1178 </string> 1494 <key>WindowToolGUID</key> 1495 <string>E15044560CFCDC1D00DE47E9</string> 1496 <key>WindowToolIsVisible</key> 1497 <false/> 1466 1498 </dict> 1467 1499 </array> -
trunk/Cocoa/Pester/Source/Pester.xcodeproj/nicholas.pbxuser
r363 r364 3 3 089C165DFE840E0CC02AAC07 /* English */ = { 4 4 uiCtxt = { 5 sepNavIntBoundsRect = "{{0, 0}, {813, 8 76}}";6 sepNavSelRange = "{1 45, 0}";5 sepNavIntBoundsRect = "{{0, 0}, {813, 899}}"; 6 sepNavSelRange = "{105, 0}"; 7 7 sepNavVisRange = "{0, 229}"; 8 8 sepNavWindowFrame = "{{15, 238}, {872, 935}}"; … … 19 19 F596730D0355CFA301407038 /* -[_NSZombie methodSignatureForSelector:] */, 20 20 F500E5370359719B01AEEDB1 /* szone_error */, 21 F5B15F74037E42EB01AEEDB1 /* -[NSException raise] */,22 21 E1A9DEE703BF3C110089E8B2 /* -[_NSZombie release] */, 23 E145384C043A31D900050002 /* NJRHotKeyManager.m:158 */,24 22 E17CA6640CF697FE00018B34 /* SetPortRGBForeColor */, 23 E15043CF0CFCC41500DE47E9 /* objc_exception_throw */, 25 24 ); 26 25 codeSenseManager = E1B11EDD0CF5F2EB004975AA /* Code sense */; … … 60 59 315, 61 60 20, 62 48 .16259765625,61 48, 63 62 43, 64 63 43, … … 75 74 ); 76 75 }; 77 PBXPerProjectTemplateStateSaveDate = 217 708774;76 PBXPerProjectTemplateStateSaveDate = 217904241; 78 77 "PBXTemplateGeometry-F5314676015831810DCA290F" = { 79 78 ContentSize = "{618, 257}"; … … 794 793 }, 795 794 ); 796 PBXWorkspaceStateSaveDate = 217 708774;795 PBXWorkspaceStateSaveDate = 217904241; 797 796 }; 798 797 sourceControlManager = E1B11EDC0CF5F2EB004975AA /* Source Control */; … … 806 805 sepNavSelRange = "{208, 0}"; 807 806 sepNavVisRange = "{0, 252}"; 807 }; 808 }; 809 E10E71F4040C335800050002 /* English */ = { 810 uiCtxt = { 811 sepNavIntBoundsRect = "{{0, 0}, {993, 1503}}"; 812 sepNavSelRange = "{1411, 0}"; 813 sepNavVisRange = "{0, 3709}"; 814 sepNavWindowFrame = "{{61, 198}, {1052, 933}}"; 808 815 }; 809 816 }; … … 818 825 E11373150439FCC700050002 /* NJRHotKey.m */ = { 819 826 uiCtxt = { 820 sepNavIntBoundsRect = "{{0, 0}, {830, 12 87}}";821 sepNavSelRange = "{ 1856, 46}";822 sepNavVisRange = "{1 263, 1577}";827 sepNavIntBoundsRect = "{{0, 0}, {830, 1298}}"; 828 sepNavSelRange = "{2509, 35}"; 829 sepNavVisRange = "{1321, 1515}"; 823 830 sepNavWindowFrame = "{{199, 307}, {889, 698}}"; 824 831 }; … … 854 861 E130B9AD03B7C59700000028 /* PSPowerManager.m */ = { 855 862 uiCtxt = { 856 sepNavIntBoundsRect = "{{0, 0}, {817, 10 45}}";857 sepNavSelRange = "{38 6, 27}";858 sepNavVisRange = "{ 24, 683}";863 sepNavIntBoundsRect = "{{0, 0}, {817, 1078}}"; 864 sepNavSelRange = "{387, 16}"; 865 sepNavVisRange = "{180, 425}"; 859 866 sepNavWindowFrame = "{{153, 349}, {889, 698}}"; 860 867 }; 861 868 }; 869 E13919E203B9E4E100000028 /* NJRIntervalField.h */ = { 870 uiCtxt = { 871 sepNavIntBoundsRect = "{{0, 0}, {761, 780}}"; 872 sepNavSelRange = "{419, 0}"; 873 sepNavVisRange = "{0, 425}"; 874 sepNavWindowFrame = "{{15, 49}, {834, 1124}}"; 875 }; 876 }; 862 877 E13919E303B9E4E100000028 /* NJRIntervalField.m */ = { 863 878 uiCtxt = { 864 sepNavIntBoundsRect = "{{0, 0}, {761, 1980}}";865 sepNavSelRange = "{ 3944, 0}";866 sepNavVisRange = "{ 2218, 3841}";867 sepNavWindowFrame = "{{ 15, 334}, {820, 839}}";879 sepNavIntBoundsRect = "{{0, 0}, {761, 946}}"; 880 sepNavSelRange = "{2674, 0}"; 881 sepNavVisRange = "{329, 2345}"; 882 sepNavWindowFrame = "{{364, 159}, {820, 839}}"; 868 883 }; 869 884 }; … … 876 891 }; 877 892 }; 878 E1 45384C043A31D900050002 /* NJRHotKeyManager.m:158*/ = {879 isa = PBX FileBreakpoint;893 E15043CF0CFCC41500DE47E9 /* objc_exception_throw */ = { 894 isa = PBXSymbolicBreakpoint; 880 895 actions = ( 881 896 ); 882 breakpointStyle = 0;897 breakpointStyle = 1; 883 898 continueAfterActions = 0; 884 899 countType = 0; 885 900 delayBeforeContinue = 0; 886 fileReference = E145383F043A1DB200050002 /* NJRHotKeyManager.m */; 887 hitCount = 0; 901 hitCount = 1; 888 902 ignoreCount = 0; 889 lineNumber = 158; 890 location = Pester; 891 modificationTime = 217621338.571945; 892 state = 1; 903 location = libobjc.A.dylib; 904 modificationTime = 217892071.677906; 905 state = 2; 906 symbolName = objc_exception_throw; 907 }; 908 E15044650CFCDC7E00DE47E9 /* NJRValidatingField.h */ = { 909 uiCtxt = { 910 sepNavIntBoundsRect = "{{0, 0}, {869, 213}}"; 911 sepNavSelRange = "{170, 0}"; 912 sepNavVisRange = "{0, 344}"; 913 }; 914 }; 915 E15044660CFCDC7E00DE47E9 /* NJRValidatingField.m */ = { 916 uiCtxt = { 917 sepNavIntBoundsRect = "{{0, 0}, {775, 1122}}"; 918 sepNavSelRange = "{0, 0}"; 919 sepNavVisRange = "{0, 4696}"; 920 sepNavWindowFrame = "{{15, 49}, {834, 1124}}"; 921 }; 893 922 }; 894 923 E162698303B6189000000028 /* NSTableView-NJRExtensions.m */ = { … … 933 962 uiCtxt = { 934 963 sepNavIntBoundsRect = "{{0, 0}, {993, 897}}"; 935 sepNavSelRange = "{ 419, 0}";936 sepNavVisRange = "{0, 471}";937 sepNavWindowFrame = "{{ 222, 51}, {1052, 933}}";964 sepNavSelRange = "{369, 87}"; 965 sepNavVisRange = "{0, 952}"; 966 sepNavWindowFrame = "{{560, 24}, {1052, 933}}"; 938 967 }; 939 968 }; … … 949 978 ignoreCount = 0; 950 979 location = ""; 951 modificationTime = 217 621338.896014;952 state = 0;980 modificationTime = 217892051.042254; 981 state = 2; 953 982 symbolName = SetPortRGBForeColor; 954 983 }; … … 962 991 E18DA4090442C56D00050002 /* PSMediaAlert.m */ = { 963 992 uiCtxt = { 964 sepNavIntBoundsRect = "{{0, 0}, {761, 792}}";965 sepNavSelRange = "{6 18, 0}";966 sepNavVisRange = "{ 3, 1720}";993 sepNavIntBoundsRect = "{{0, 0}, {761, 847}}"; 994 sepNavSelRange = "{643, 0}"; 995 sepNavVisRange = "{0, 1827}"; 967 996 sepNavWindowFrame = "{{153, 208}, {820, 839}}"; 968 997 }; … … 970 999 E18DAAEB0442CC3E00050002 /* NJRSoundManager.m */ = { 971 1000 uiCtxt = { 972 sepNavIntBoundsRect = "{{0, 0}, {761, 12 54}}";973 sepNavSelRange = "{ 846, 134}";974 sepNavVisRange = "{0, 22 51}";1001 sepNavIntBoundsRect = "{{0, 0}, {761, 1210}}"; 1002 sepNavSelRange = "{576, 0}"; 1003 sepNavVisRange = "{0, 2216}"; 975 1004 sepNavWindowFrame = "{{61, 292}, {820, 839}}"; 976 1005 }; … … 996 1025 E1A18CAC03B4344C00000028 /* PSAlerts.m */ = { 997 1026 uiCtxt = { 998 sepNavIntBoundsRect = "{{0, 0}, {830, 16 17}}";999 sepNavSelRange = "{ 2194, 0}";1000 sepNavVisRange = "{1 314, 2197}";1027 sepNavIntBoundsRect = "{{0, 0}, {830, 1672}}"; 1028 sepNavSelRange = "{3864, 7}"; 1029 sepNavVisRange = "{1868, 2150}"; 1001 1030 sepNavWindowFrame = "{{528, 47}, {889, 698}}"; 1002 1031 }; … … 1013 1042 ignoreCount = 0; 1014 1043 location = ""; 1015 modificationTime = 217 621338.880709;1016 state = 0;1044 modificationTime = 217892051.041767; 1045 state = 2; 1017 1046 symbolName = "-[_NSZombie release]"; 1018 1047 }; … … 1037 1066 E1B11F8B0CF5F30F004975AA /* Info-Pester.plist */ = { 1038 1067 uiCtxt = { 1039 sepNavIntBoundsRect = "{{0, 0}, {736, 8 65}}";1040 sepNavSelRange = "{ 981, 0}";1068 sepNavIntBoundsRect = "{{0, 0}, {736, 888}}"; 1069 sepNavSelRange = "{346, 0}"; 1041 1070 sepNavVisRange = "{0, 2337}"; 1042 1071 sepNavWindowFrame = "{{549, 47}, {795, 924}}"; … … 1113 1142 E1BF6E9103C928D200050002 /* PSTimer.m */ = { 1114 1143 uiCtxt = { 1115 sepNavIntBoundsRect = "{{0, 0}, {9 40, 2908}}";1116 sepNavSelRange = "{ 5491, 0}";1117 sepNavVisRange = "{ 0, 3062}";1144 sepNavIntBoundsRect = "{{0, 0}, {920, 2842}}"; 1145 sepNavSelRange = "{4580, 0}"; 1146 sepNavVisRange = "{409, 1359}"; 1118 1147 sepNavWindowFrame = "{{38, 50}, {999, 1128}}"; 1148 }; 1149 }; 1150 E1CDEC3D0444053F00AEEDB1 /* NJRNonCenteringWindow.h */ = { 1151 uiCtxt = { 1152 sepNavIntBoundsRect = "{{0, 0}, {993, 874}}"; 1153 sepNavSelRange = "{0, 0}"; 1154 sepNavVisRange = "{0, 242}"; 1155 sepNavWindowFrame = "{{176, 93}, {1052, 933}}"; 1156 }; 1157 }; 1158 E1CDEC3E0444053F00AEEDB1 /* NJRNonCenteringWindow.m */ = { 1159 uiCtxt = { 1160 sepNavIntBoundsRect = "{{0, 0}, {993, 874}}"; 1161 sepNavSelRange = "{0, 0}"; 1162 sepNavVisRange = "{0, 261}"; 1163 sepNavWindowFrame = "{{153, 114}, {1052, 933}}"; 1119 1164 }; 1120 1165 }; … … 1142 1187 }; 1143 1188 }; 1144 E1E 9A33903C8EF6700050002 /* SUSpeaker.m */ = {1145 uiCtxt = { 1146 sepNavIntBoundsRect = "{{0, 0}, { 869, 3234}}";1147 sepNavSelRange = "{ 1839, 122}";1148 sepNavVisRange = "{ 1660, 639}";1149 sepNavWindowFrame = "{{ 314, 202}, {889, 698}}";1189 E1ECA00703C002B300F54C66 /* PSError.m */ = { 1190 uiCtxt = { 1191 sepNavIntBoundsRect = "{{0, 0}, {993, 874}}"; 1192 sepNavSelRange = "{254, 0}"; 1193 sepNavVisRange = "{0, 1270}"; 1194 sepNavWindowFrame = "{{153, 114}, {1052, 933}}"; 1150 1195 }; 1151 1196 }; … … 1215 1260 ignoreCount = 0; 1216 1261 location = libSystem.B.dylib; 1217 modificationTime = 217 621338.572037;1218 state = 1;1262 modificationTime = 217892051.041262; 1263 state = 2; 1219 1264 symbolName = szone_error; 1220 1265 }; 1221 1266 F517D63E0356B80C016D68B9 /* PSAlarmsController.m */ = { 1222 1267 uiCtxt = { 1223 sepNavIntBoundsRect = "{{0, 0}, {830, 2057}}"; 1224 sepNavSelRange = "{3828, 50}"; 1225 sepNavVisRange = "{2755, 1818}"; 1226 sepNavWindowFrame = "{{360, 160}, {889, 698}}"; 1268 sepNavIntBoundsRect = "{{0, 0}, {817, 2123}}"; 1269 sepNavSelRange = "{2816, 14}"; 1270 sepNavVisRange = "{2384, 686}"; 1271 sepNavWindowFrame = "{{744, 79}, {889, 698}}"; 1272 }; 1273 }; 1274 F517D63F0356B80C016D68B9 /* PSAlarmsController.h */ = { 1275 uiCtxt = { 1276 sepNavIntBoundsRect = "{{0, 0}, {830, 639}}"; 1277 sepNavSelRange = "{0, 0}"; 1278 sepNavVisRange = "{0, 460}"; 1227 1279 }; 1228 1280 }; 1229 1281 F517D6420356B8CC016D68B9 /* PSAlarms.m */ = { 1230 1282 uiCtxt = { 1231 sepNavIntBoundsRect = "{{0, 0}, {920, 3619}}"; 1232 sepNavSelRange = "{8316, 0}"; 1233 sepNavVisRange = "{7670, 1218}"; 1234 sepNavWindowFrame = "{{176, 187}, {820, 839}}"; 1283 sepNavIntBoundsRect = "{{0, 0}, {761, 3737}}"; 1284 sepNavSelRange = "{9736, 0}"; 1285 sepNavVisRange = "{7626, 2401}"; 1286 sepNavWindowFrame = "{{938, 170}, {820, 839}}"; 1287 }; 1288 }; 1289 F517D6430356B8CC016D68B9 /* PSAlarms.h */ = { 1290 uiCtxt = { 1291 sepNavIntBoundsRect = "{{0, 0}, {761, 780}}"; 1292 sepNavSelRange = "{0, 0}"; 1293 sepNavVisRange = "{0, 953}"; 1235 1294 }; 1236 1295 }; 1237 1296 F560E2F10357506401A4E466 /* PSApplication.m */ = { 1238 1297 uiCtxt = { 1239 sepNavIntBoundsRect = "{{0, 0}, { 761, 3157}}";1240 sepNavSelRange = "{ 1549, 0}";1241 sepNavVisRange = "{ 0, 1956}";1298 sepNavIntBoundsRect = "{{0, 0}, {817, 2772}}"; 1299 sepNavSelRange = "{9502, 21}"; 1300 sepNavVisRange = "{8732, 887}"; 1242 1301 sepNavWindowFrame = "{{586, 75}, {820, 839}}"; 1243 1302 }; … … 1268 1327 F589C9C6035AA12B0155F4B2 /* Read Me.rtfd */ = { 1269 1328 uiCtxt = { 1270 sepNavIntBoundsRect = "{{0, 0}, {960, 44 59}}";1271 sepNavSelRange = "{1 4260, 0}";1272 sepNavVisRect = "{{0, 2212}, {960, 1091}}";1329 sepNavIntBoundsRect = "{{0, 0}, {960, 4408}}"; 1330 sepNavSelRange = "{16, 0}"; 1331 sepNavVisRect = "{{0, 199}, {960, 1091}}"; 1273 1332 sepNavWindowFrame = "{{15, 50}, {999, 1128}}"; 1274 1333 }; … … 1285 1344 ignoreCount = 0; 1286 1345 location = ""; 1287 modificationTime = 217 621338.862668;1288 state = 0;1346 modificationTime = 217892051.040556; 1347 state = 2; 1289 1348 symbolName = "-[_NSZombie methodSignatureForSelector:]"; 1290 1349 }; 1291 1350 F59DC6D30353C9E601AEEDB1 /* PSAlarmSetController.h */ = { 1292 1351 uiCtxt = { 1293 sepNavIntBoundsRect = "{{0, 0}, { 940, 1092}}";1294 sepNavSelRange = "{ 945, 9}";1295 sepNavVisRange = "{0, 23 47}";1352 sepNavIntBoundsRect = "{{0, 0}, {775, 1065}}"; 1353 sepNavSelRange = "{1563, 0}"; 1354 sepNavVisRange = "{0, 2381}"; 1296 1355 sepNavWindowFrame = "{{23, 50}, {999, 1128}}"; 1297 1356 }; … … 1299 1358 F59DC6D40353C9E601AEEDB1 /* PSAlarmSetController.m */ = { 1300 1359 uiCtxt = { 1301 sepNavIntBoundsRect = "{{0, 0}, { 940, 6539}}";1302 sepNavSelRange = "{ 4235, 0}";1303 sepNavVisRange = "{ 2184, 4891}";1304 sepNavWindowFrame = "{{5 07, 50}, {999, 1128}}";1360 sepNavIntBoundsRect = "{{0, 0}, {775, 7139}}"; 1361 sepNavSelRange = "{21486, 11}"; 1362 sepNavVisRange = "{18453, 3820}"; 1363 sepNavWindowFrame = "{{561, 54}, {834, 1124}}"; 1305 1364 }; 1306 1365 }; 1307 1366 F59DC6DC0353DE5101AEEDB1 /* PSAlarmNotifierController.m */ = { 1308 1367 uiCtxt = { 1309 sepNavIntBoundsRect = "{{0, 0}, { 920, 2233}}";1310 sepNavSelRange = "{ 2975, 17}";1311 sepNavVisRange = "{ 2072, 999}";1368 sepNavIntBoundsRect = "{{0, 0}, {817, 2391}}"; 1369 sepNavSelRange = "{4583, 27}"; 1370 sepNavVisRange = "{4327, 730}"; 1312 1371 sepNavWindowFrame = "{{613, 82}, {820, 839}}"; 1313 1372 }; … … 1344 1403 F59E47A7036AAA6D016B311C /* PSAlert.m */ = { 1345 1404 uiCtxt = { 1346 sepNavIntBoundsRect = "{{0, 0}, {761, 8 69}}";1347 sepNavSelRange = "{1 016, 17}";1348 sepNavVisRange = "{ 0, 1813}";1349 sepNavWindowFrame = "{{ 469, -22}, {820, 839}}";1405 sepNavIntBoundsRect = "{{0, 0}, {761, 891}}"; 1406 sepNavSelRange = "{1898, 0}"; 1407 sepNavVisRange = "{145, 1875}"; 1408 sepNavWindowFrame = "{{641, 165}, {820, 839}}"; 1350 1409 }; 1351 1410 }; … … 1360 1419 uiCtxt = { 1361 1420 sepNavIntBoundsRect = "{{0, 0}, {1297, 781}}"; 1362 sepNavSelRange = "{872, 0}"; 1363 sepNavVisRange = "{32, 1931}"; 1421 sepNavSelRange = "{1311, 0}"; 1422 sepNavVisRange = "{0, 1940}"; 1423 sepNavWindowFrame = "{{360, 78}, {1356, 780}}"; 1424 }; 1425 }; 1426 F59E47AC036AAC1E016B311C /* PSBeepAlert.h */ = { 1427 uiCtxt = { 1428 sepNavIntBoundsRect = "{{0, 0}, {1297, 721}}"; 1429 sepNavSelRange = "{200, 12}"; 1430 sepNavVisRange = "{0, 370}"; 1364 1431 sepNavWindowFrame = "{{360, 78}, {1356, 780}}"; 1365 1432 }; … … 1396 1463 }; 1397 1464 }; 1465 F59E47BC036AB228016B311C /* PSMovieAlert.m */ = { 1466 uiCtxt = { 1467 sepNavIntBoundsRect = "{{0, 0}, {993, 1522}}"; 1468 sepNavSelRange = "{1930, 0}"; 1469 sepNavVisRange = "{1829, 2467}"; 1470 sepNavWindowFrame = "{{84, 177}, {1052, 933}}"; 1471 }; 1472 }; 1473 F59E47BD036AB228016B311C /* PSMovieAlert.h */ = { 1474 uiCtxt = { 1475 sepNavIntBoundsRect = "{{0, 0}, {993, 874}}"; 1476 sepNavSelRange = "{0, 0}"; 1477 sepNavVisRange = "{0, 598}"; 1478 }; 1479 }; 1398 1480 F59E4BE6036B2E5E016B311C /* PSScriptAlert.m */ = { 1399 1481 uiCtxt = { … … 1414 1496 F59F6CB40354E7DA01AEEDB1 /* PSAlarm.h */ = { 1415 1497 uiCtxt = { 1416 sepNavIntBoundsRect = "{{0, 0}, { 830, 924}}";1498 sepNavIntBoundsRect = "{{0, 0}, {993, 913}}"; 1417 1499 sepNavSelRange = "{0, 0}"; 1418 sepNavVisRange = "{0, 1854}"; 1500 sepNavVisRange = "{0, 2636}"; 1501 sepNavWindowFrame = "{{15, 240}, {1052, 933}}"; 1419 1502 }; 1420 1503 }; 1421 1504 F59F6CB50354E7DA01AEEDB1 /* PSAlarm.m */ = { 1422 1505 uiCtxt = { 1423 sepNavIntBoundsRect = "{{0, 0}, { 828, 6292}}";1424 sepNavSelRange = "{ 823, 0}";1425 sepNavVisRange = "{ 0, 2454}";1426 sepNavWindowFrame = "{{ 214, 23}, {887, 884}}";1427 }; 1428 }; 1429 F5B 15F74037E42EB01AEEDB1 /* -[NSException raise]*/ = {1430 isa = PBXSymbolicBreakpoint;1431 actions = (1432 );1433 breakpointStyle = 0;1434 continueAfterActions = 0;1435 countType = 0;1436 delayBeforeContinue = 0;1437 hitCount = 0;1438 ignoreCount = 0;1439 location = CoreFoundation;1440 modificationTime = 217621338.572041;1441 state = 1;1442 symbolName = "-[NSException raise]";1506 sepNavIntBoundsRect = "{{0, 0}, {993, 6490}}"; 1507 sepNavSelRange = "{20070, 0}"; 1508 sepNavVisRange = "{17193, 2959}"; 1509 sepNavWindowFrame = "{{466, 241}, {1052, 933}}"; 1510 }; 1511 }; 1512 F5B79836035F64F80136A8DD /* NJRTableView.m */ = { 1513 uiCtxt = { 1514 sepNavIntBoundsRect = "{{0, 0}, {993, 1210}}"; 1515 sepNavSelRange = "{899, 0}"; 1516 sepNavVisRange = "{0, 2747}"; 1517 }; 1518 }; 1519 F5B79837035F64F80136A8DD /* NJRTableView.h */ = { 1520 uiCtxt = { 1521 sepNavIntBoundsRect = "{{0, 0}, {993, 897}}"; 1522 sepNavSelRange = "{646, 0}"; 1523 sepNavVisRange = "{0, 646}"; 1524 sepNavWindowFrame = "{{835, 245}, {1052, 933}}"; 1525 }; 1443 1526 }; 1444 1527 F5F1986C036B813101EB0372 /* PSSpeechAlert.m */ = { 1445 1528 uiCtxt = { 1446 sepNavIntBoundsRect = "{{0, 0}, {761, 1078}}"; 1447 sepNavSelRange = "{932, 0}"; 1448 sepNavVisRange = "{177, 1917}"; 1449 sepNavWindowFrame = "{{533, 79}, {820, 839}}"; 1529 sepNavIntBoundsRect = "{{0, 0}, {920, 1056}}"; 1530 sepNavSelRange = "{1881, 0}"; 1531 sepNavVisRange = "{1560, 905}"; 1532 sepNavWindowFrame = "{{454, 61}, {1052, 933}}"; 1533 }; 1534 }; 1535 F5F1986D036B813101EB0372 /* PSSpeechAlert.h */ = { 1536 uiCtxt = { 1537 sepNavIntBoundsRect = "{{0, 0}, {817, 264}}"; 1538 sepNavSelRange = "{172, 0}"; 1539 sepNavVisRange = "{0, 264}"; 1450 1540 }; 1451 1541 }; 1452 1542 F5F19870036B822E01EB0372 /* NJRVoicePopUpButton.m */ = { 1453 1543 uiCtxt = { 1454 sepNavIntBoundsRect = "{{0, 0}, {869, 1496}}"; 1455 sepNavSelRange = "{514, 81}"; 1456 sepNavVisRange = "{226, 979}"; 1457 sepNavWindowFrame = "{{61, 433}, {889, 698}}"; 1544 sepNavIntBoundsRect = "{{0, 0}, {830, 1441}}"; 1545 sepNavSelRange = "{976, 0}"; 1546 sepNavVisRange = "{0, 1846}"; 1547 sepNavWindowFrame = "{{981, 73}, {889, 698}}"; 1548 }; 1549 }; 1550 F5F19871036B822E01EB0372 /* NJRVoicePopUpButton.h */ = { 1551 uiCtxt = { 1552 sepNavIntBoundsRect = "{{0, 0}, {830, 662}}"; 1553 sepNavSelRange = "{250, 0}"; 1554 sepNavVisRange = "{0, 583}"; 1555 }; 1556 }; 1557 F5F198D0036BE57401EB0372 /* NJRTableDelegate.m */ = { 1558 uiCtxt = { 1559 sepNavIntBoundsRect = "{{0, 0}, {993, 2970}}"; 1560 sepNavSelRange = "{8161, 0}"; 1561 sepNavVisRange = "{6950, 2655}"; 1562 sepNavWindowFrame = "{{236, 118}, {1052, 933}}"; 1563 }; 1564 }; 1565 F5F198D1036BE57401EB0372 /* NJRTableDelegate.h */ = { 1566 uiCtxt = { 1567 sepNavIntBoundsRect = "{{0, 0}, {993, 897}}"; 1568 sepNavSelRange = "{495, 46}"; 1569 sepNavVisRange = "{0, 546}"; 1570 sepNavWindowFrame = "{{130, 135}, {1052, 933}}"; 1458 1571 }; 1459 1572 }; -
trunk/Cocoa/Pester/Source/Pester.xcodeproj/project.pbxproj
r363 r364 8 8 9 9 /* Begin PBXBuildFile section */ 10 E15044670CFCDC7E00DE47E9 /* NJRValidatingField.m in Sources */ = {isa = PBXBuildFile; fileRef = E15044660CFCDC7E00DE47E9 /* NJRValidatingField.m */; }; 10 11 E17562620CF8C50B00FC5057 /* Sparkle.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E17562610CF8C50B00FC5057 /* Sparkle.framework */; }; 11 E17562720CF8C53F00FC5057 /* Sparkle.framework in Copy Files*/ = {isa = PBXBuildFile; fileRef = E17562610CF8C50B00FC5057 /* Sparkle.framework */; };12 E17562720CF8C53F00FC5057 /* Sparkle.framework in Copy Sparkle.framework */ = {isa = PBXBuildFile; fileRef = E17562610CF8C50B00FC5057 /* Sparkle.framework */; }; 12 13 E17CA7BB0CF7D08C00018B34 /* DynaLoader.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E17CA7BA0CF7D08C00018B34 /* DynaLoader.a */; }; 13 E17CA9AB0CF7F8CB00018B34 /* Manip.pm in Copy Files */ = {isa = PBXBuildFile; fileRef = E17CA9A90CF7F8C200018B34 /* Manip.pm */; };14 E17CA9AB0CF7F8CB00018B34 /* Manip.pm in Copy Perl Modules */ = {isa = PBXBuildFile; fileRef = E17CA9A90CF7F8C200018B34 /* Manip.pm */; }; 14 15 E1B11F270CF5F30F004975AA /* Notifier.nib in Resources */ = {isa = PBXBuildFile; fileRef = F59DC6DF0353DF5E01AEEDB1 /* Notifier.nib */; }; 15 16 E1B11F280CF5F30F004975AA /* Application icon.icns in Resources */ = {isa = PBXBuildFile; fileRef = F59DC6E30353ED1201AEEDB1 /* Application icon.icns */; }; … … 75 76 E1B11F660CF5F30F004975AA /* PSError.m in Sources */ = {isa = PBXBuildFile; fileRef = E1ECA00703C002B300F54C66 /* PSError.m */; }; 76 77 E1B11F670CF5F30F004975AA /* NJRCenteringMovieView.m in Sources */ = {isa = PBXBuildFile; fileRef = E1D358BA03C60CE900C8A18E /* NJRCenteringMovieView.m */; }; 77 E1B11F680CF5F30F004975AA /* SUSpeaker.m in Sources */ = {isa = PBXBuildFile; fileRef = E1E9A33903C8EF6700050002 /* SUSpeaker.m */; };78 78 E1B11F690CF5F30F004975AA /* PSTimer.m in Sources */ = {isa = PBXBuildFile; fileRef = E1BF6E9103C928D200050002 /* PSTimer.m */; }; 79 79 E1B11F6A0CF5F30F004975AA /* PSWakeAlert.m in Sources */ = {isa = PBXBuildFile; fileRef = E19FD39F03C98645001509F3 /* PSWakeAlert.m */; }; … … 108 108 109 109 /* Begin PBXCopyFilesBuildPhase section */ 110 E17562730CF8C55D00FC5057 /* Copy Files*/ = {110 E17562730CF8C55D00FC5057 /* Copy Sparkle.framework */ = { 111 111 isa = PBXCopyFilesBuildPhase; 112 112 buildActionMask = 2147483647; … … 114 114 dstSubfolderSpec = 10; 115 115 files = ( 116 E17562720CF8C53F00FC5057 /* Sparkle.framework in CopyFiles */, 117 ); 116 E17562720CF8C53F00FC5057 /* Sparkle.framework in Copy Sparkle.framework */, 117 ); 118 name = "Copy Sparkle.framework"; 118 119 runOnlyForDeploymentPostprocessing = 0; 119 120 }; 120 E17CA9A80CF7F89900018B34 /* Copy Files */ = {121 E17CA9A80CF7F89900018B34 /* Copy Perl Modules */ = { 121 122 isa = PBXCopyFilesBuildPhase; 122 123 buildActionMask = 2147483647; … … 124 125 dstSubfolderSpec = 7; 125 126 files = ( 126 E17CA9AB0CF7F8CB00018B34 /* Manip.pm in CopyFiles */, 127 ); 127 E17CA9AB0CF7F8CB00018B34 /* Manip.pm in Copy Perl Modules */, 128 ); 129 name = "Copy Perl Modules"; 128 130 runOnlyForDeploymentPostprocessing = 0; 129 131 }; … … 160 162 E14DEC820438969400050002 /* NJRHotKeyFieldCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NJRHotKeyFieldCell.h; sourceTree = "<group>"; }; 161 163 E14DEC830438969400050002 /* NJRHotKeyFieldCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NJRHotKeyFieldCell.m; sourceTree = "<group>"; }; 164 E15044650CFCDC7E00DE47E9 /* NJRValidatingField.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NJRValidatingField.h; sourceTree = "<group>"; }; 165 E15044660CFCDC7E00DE47E9 /* NJRValidatingField.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = NJRValidatingField.m; sourceTree = "<group>"; }; 162 166 E162698303B6189000000028 /* NSTableView-NJRExtensions.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = "NSTableView-NJRExtensions.m"; sourceTree = "<group>"; }; 163 167 E162698403B6189000000028 /* NSTableView-NJRExtensions.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = "NSTableView-NJRExtensions.h"; sourceTree = "<group>"; }; … … 221 225 E1DEF116040014EB00050002 /* PSTimeDateEditor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PSTimeDateEditor.h; sourceTree = "<group>"; }; 222 226 E1DEF117040014EB00050002 /* PSTimeDateEditor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PSTimeDateEditor.m; sourceTree = "<group>"; }; 223 E1E9A33903C8EF6700050002 /* SUSpeaker.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = SUSpeaker.m; sourceTree = "<group>"; };224 E1E9A33A03C8EF6700050002 /* SUSpeaker.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SUSpeaker.h; sourceTree = "<group>"; };225 227 E1ECA00603C002B300F54C66 /* PSError.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PSError.h; sourceTree = SOURCE_ROOT; }; 226 228 E1ECA00703C002B300F54C66 /* PSError.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PSError.m; sourceTree = SOURCE_ROOT; }; … … 395 397 isa = PBXGroup; 396 398 children = ( 397 F5243DA40378681101AEEDB1 /* Popup triangle.tiff */,398 399 E18830410442B5FC00050002 /* Calendar icons */, 399 400 E18830420442B60000050002 /* Volume icons */, 401 F5243DA40378681101AEEDB1 /* Popup triangle.tiff */, 400 402 29B97318FDCFA39411CA2CEA /* MainMenu.nib */, 401 403 F560E2EE03574F8A01A4E466 /* Alarms.nib */, … … 526 528 ); 527 529 name = Documentation; 528 sourceTree = "<group>";529 };530 E1E9A33D03C8EF6800050002 /* SpeechUtilities */ = {531 isa = PBXGroup;532 children = (533 E1E9A33903C8EF6700050002 /* SUSpeaker.m */,534 E1E9A33A03C8EF6700050002 /* SUSpeaker.h */,535 );536 name = SpeechUtilities;537 530 sourceTree = "<group>"; 538 531 }; … … 582 575 isa = PBXGroup; 583 576 children = ( 584 E1E9A33D03C8EF6800050002 /* SpeechUtilities */,585 577 F59E47A6036AA5FC016B311C /* BDAlias */, 586 578 E1DEF116040014EB00050002 /* PSTimeDateEditor.h */, … … 633 625 F5F240CD036A877301FE7503 /* NJRQTMediaPopUpButton.h */, 634 626 F5F240CC036A877301FE7503 /* NJRQTMediaPopUpButton.m */, 627 E15044650CFCDC7E00DE47E9 /* NJRValidatingField.h */, 628 E15044660CFCDC7E00DE47E9 /* NJRValidatingField.m */, 635 629 F5F19871036B822E01EB0372 /* NJRVoicePopUpButton.h */, 636 630 F5F19870036B822E01EB0372 /* NJRVoicePopUpButton.m */, … … 685 679 E1B11F7E0CF5F30F004975AA /* Frameworks */, 686 680 E1B11F260CF5F30F004975AA /* Resources */, 687 E17CA9A80CF7F89900018B34 /* CopyFiles */, 688 E17562730CF8C55D00FC5057 /* CopyFiles */, 689 E1B11F860CF5F30F004975AA /* ShellScript */, 681 E17CA9A80CF7F89900018B34 /* Copy Perl Modules */, 682 E17562730CF8C55D00FC5057 /* Copy Sparkle.framework */, 690 683 ); 691 684 buildRules = ( … … 749 742 }; 750 743 /* End PBXResourcesBuildPhase section */ 751 752 /* Begin PBXShellScriptBuildPhase section */753 E1B11F860CF5F30F004975AA /* ShellScript */ = {754 isa = PBXShellScriptBuildPhase;755 buildActionMask = 2147483647;756 files = (757 );758 runOnlyForDeploymentPostprocessing = 0;759 shellPath = /bin/sh;760 shellScript = "/usr/bin/agvtool mvers -terse1 >| ${SRCROOT}/VERSION";761 };762 /* End PBXShellScriptBuildPhase section */763 744 764 745 /* Begin PBXSourcesBuildPhase section */ … … 806 787 E1B11F660CF5F30F004975AA /* PSError.m in Sources */, 807 788 E1B11F670CF5F30F004975AA /* NJRCenteringMovieView.m in Sources */, 808 E1B11F680CF5F30F004975AA /* SUSpeaker.m in Sources */,809 789 E1B11F690CF5F30F004975AA /* PSTimer.m in Sources */, 810 790 E1B11F6A0CF5F30F004975AA /* PSWakeAlert.m in Sources */, … … 830 810 E1B121970CF62FD1004975AA /* NSMenuItem-NJRExtensions.m in Sources */, 831 811 E1B1219E0CF63858004975AA /* NSImage-NJRExtensions.m in Sources */, 812 E15044670CFCDC7E00DE47E9 /* NJRValidatingField.m in Sources */, 832 813 ); 833 814 runOnlyForDeploymentPostprocessing = 0; … … 966 947 buildSettings = { 967 948 COPY_PHASE_STRIP = NO; 968 CURRENT_PROJECT_VERSION = 2 1;949 CURRENT_PROJECT_VERSION = 22; 969 950 FRAMEWORK_SEARCH_PATHS = ( 970 951 "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", … … 1004 985 buildSettings = { 1005 986 COPY_PHASE_STRIP = YES; 1006 CURRENT_PROJECT_VERSION = 2 1;987 CURRENT_PROJECT_VERSION = 22; 1007 988 FRAMEWORK_SEARCH_PATHS = ( 1008 989 "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", -
trunk/Cocoa/Pester/Updates/release-notes.html
r363 r364 9 9 <body> 10 10 <table> 11 <tr><th colspan="2">Pester 1.1 beta 5 (21)</th></tr>11 <tr><th colspan="2">Pester 1.1 beta 6 (22)</th></tr> 12 12 <tr><td class="icon"></td> 13 13 <td> 14 Removed user interface elements that don’t do anything yet. They’ll be back. 14 <ul> 15 <li>Repeating alarms continue to repeat if they didn’t expire while Pester was not running.</li> 16 <li>(Re-)added speech alerts.</li> 17 <li>Alert help tags in the alarm list appear correctly in Leopard.</li> 18 <li>Changes to the field you’re editing are saved when switching between “in” and “at”.</li> 19 <li>Corrected validation of the alert repetition field which allowed you to specify zero (blank) or over 99 repetitions.</li> 20 <li>Pester 1.0 alarms no longer create duplicates of themselves on import.</li> 21 </ul> 15 22 </td> 16 23 </tr> -
trunk/Cocoa/Pester/Updates/updates.xml
r363 r364 5 5 <link>http://web.sabi.net/nriley/software/#pester</link> 6 6 <description>Appcast for Pester updates.</description> 7 <generator>Feeder 1.4.9.v2 http://reinventedsoftware.com/feeder/</generator>8 7 <docs>http://blogs.law.harvard.edu/tech/rss</docs> 9 8 <language>en</language> 10 <pubDate> Sat, 24 Nov 2007 17:14:47-0600</pubDate>11 <lastBuildDate> Sat, 24 Nov 2007 17:14:47-0600</lastBuildDate>9 <pubDate>Tue, 27 Nov 2007 18:26:26 -0600</pubDate> 10 <lastBuildDate>Tue, 27 Nov 2007 18:26:26 -0600</lastBuildDate> 12 11 13 12 <atom:link href="http://web.sabi.net/nriley/software/Pester/updates.xml" rel="self" type="application/rss+xml"/> 14 13 <item> 14 <title>Pester 1.1b6</title> 15 <link>http://web.sabi.net/nriley/software/#pester</link> 16 <author>pester@sabi.net (Nicholas Riley)</author> 17 <pubDate>Tue, 27 Nov 2007 18:26:26 -0600</pubDate> 18 <enclosure url="http://web.sabi.net/nriley/software/Pester-1.1b6.dmg" length="746933" type="application/x-apple-diskimage" sparkle:version="22" sparkle:shortVersionString="1.1b6" sparkle:dsaSignature="MC4CFQCKd5osaqHiFoGzDDTAHtBy+fHabgIVAJ9odNFRknU2/Czd3hVHu/htpvEu"/> 19 <guid isPermaLink="false">pester-11b6</guid> 20 <sparkle:releaseNotesLink>http://web.sabi.net/nriley/software/Pester/release-notes.html</sparkle:releaseNotesLink> 21 </item> 22 <item> 15 23 <title>Pester 1.1b5</title> 16 24 <link>http://web.sabi.net/nriley/software/#pester</link> 17 <author>pester@sabi.net </author>25 <author>pester@sabi.net (Nicholas Riley)</author> 18 26 <pubDate>Sat, 24 Nov 2007 17:14:47 -0600</pubDate> 19 27 <enclosure url="http://web.sabi.net/nriley/software/Pester-1.1b5.dmg" length="749389" type="application/x-apple-diskimage" sparkle:version="21" sparkle:shortVersionString="1.1b5" sparkle:dsaSignature="MCwCFFkK4zRnPAKoKDEz3h8/Ra4KDZT6AhQryVERDhVrDE1Q014MLJv/HKVc5g=="/> -
trunk/Cocoa/Pester/package-Pester.sh
r361 r364 8 8 # gather information 9 9 cd "$PACKAGEDIR"/Source 10 VERSION=` cat VERSION`10 VERSION=`agvtool mvers -terse1` 11 11 BUILD=`agvtool vers -terse` 12 12 DMG="$PRODUCT-$VERSION.dmg" VOL="$PRODUCT $VERSION" … … 46 46 DIGEST=`openssl dgst -sha1 -binary < $DMG | openssl dgst -dss1 -sign ~/Documents/Development/DSA/dsa_priv.pem | openssl enc -base64` 47 47 perl -pi -e 's|(<enclosure url=".+'$DMG'").+/>|\1 length="'$SIZE'" type="application/x-apple-diskimage" sparkle:version="'$BUILD'" sparkle:shortVersionString="'$VERSION'" sparkle:dsaSignature="'$DIGEST'"/>|' Updates/updates.xml 48 scp $DMG ainaz:web/nriley/software/ 49 ssh ainaz chmod go+r web/nriley/software/$DMG 48 scp $DMG ainaz:web/nriley/software/$DMG.new 49 ssh ainaz chmod go+r web/nriley/software/$DMG.new 50 ssh ainaz mv web/nriley/software/$DMG{.new,} 50 51 rsync -avz --exclude='.*' Updates/ ainaz:web/nriley/software/$PRODUCT/ 51 cd "$PACKAGEDIR"/Source52 # cd "$PACKAGEDIR"/Source 52 53 # agvtool bump -all 53 54
Note:
See TracChangeset
for help on using the changeset viewer.