Changeset 364 for trunk/Cocoa


Ignore:
Timestamp:
11/28/07 01:29:26 (12 years ago)
Author:
Nicholas Riley
Message:

English.lproj/Alarms.nib: Specify alternating row coloring in the nib,
now we're 10.4+.

English.lproj/InfoPlist.strings: Updated for 1.1b6.

English.lproj/Localizable.strings: Quote alarm message in pretty
description (used in tooltip). Change voice error now it no longer
incorporates OSStatus.

English.lproj/MainMenu.nib: Add speech prefs again; turn repetitions
field into a NJRValidatingField and hook up its delegate.

Info-Pester.plist: Updated for 1.1b6.

NJRHotKey.m: Switch to new Objective-C exception style.

NJRIntervalField.[hm]: Now a subclass of NJRValidatingField.

NJRTableDelegate.m: Get rid of our own tooltip support as NSTableView
now supports them (though with a minor visual glitch on the first
tooltip).

NJRTableView.[hm]: Remove tooltip support. Remove alternating row
coloring support.

NJRValidatingField.[hm]: Contains validation sheet stuff from
NJRIntervalField.

NJRVoicePopUpButton.[hm]: Switch to NSSpeechSynthesizer.

PSAlarm.m: Quote alarm message in pretty description (used in
tooltip). Fix repeating alarms not restoring as repeating if they
didn't expire while Pester was not running. No longer set timer on
Pester 1.0 alarm import, to help make importing atomic.

PSAlarmSetController.[hm]: Use NJRValidatingField for repetitions
field. Switch to new Objective-C exception style. Fix validation
issues on in/at changing. Temporary changes to restore speech support
and allow the sound popup to be removed entirely from the nib (rather
than being dragged out of the visible area, as it was in 1.1b5).
Changes for NSSpeechSynthesizer, which uses different voice names.

PSAlarms.m: Switch to new Objective-C exception style. Fix
duplication and error handling in Pester 1.0 alarm import, making
atomic.

PSAlarmsController.m: Use new tooltip support (since it's implemented
in the delegate rather than the data source, we have to proxy it).

PSAlerts.m: Wrap initialization in exception block so we don't leak.

PSApplication.m: Switch to new Objective-C exception style.

PSMediaAlert.m: Clamp repetitions at 1..99 so the user can't type an
invalid value, then quit and have it saved.

PSSpeechAlert.[hm]: Switch to NSSpeechSynthesizer. Throw an
intelligible exception if the voice is unavailable.

PSTimer.m: Switch to new Objective-C exception style.

Pester.xcodeproj: Remove VERSION generation; rename targets to be more
understandable.

Read Me.rtfd: Updated for 1.1b6.

SUSpeaker.[hm]: Gone in switch to NSSpeechSynthesizer.

VERSION: Gone - we use agvtool for everything now.

Updates/release-notes.html: Updated for 1.1b6.

Updates/updates.xml: Updated for 1.1b6.

package-Pester.sh: Use agvtool to get version. Atomically update
file on Web server to avoid partial downloads.

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  
    11<?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">
    33<plist version="1.0">
    44<dict>
    5         <key>IBDocumentLocation</key>
    6         <string>41 63 356 240 0 0 1280 832 </string>
    75        <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>
    911        <key>IBOpenObjects</key>
    1012        <array>
    11                 <integer>8</integer>
     13                <integer>9</integer>
    1214        </array>
    1315        <key>IBSystem Version</key>
    14         <string>6I32</string>
     16        <string>9B18</string>
     17        <key>targetFramework</key>
     18        <string>IBCocoaFramework</string>
    1519</dict>
    1620</plist>
  • trunk/Cocoa/Pester/Source/English.lproj/MainMenu.nib/classes.nib

    r363 r364  
    9797                                <string>NSStepper</string>
    9898                                <key>soundRepetitions</key>
    99                                 <string>NSTextField</string>
     99                                <string>NJRValidatingField</string>
    100100                                <key>soundRepetitionsLabel</key>
    101101                                <string>NSTextField</string>
     
    142142                </dict>
    143143                <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>
    144152                        <key>ACTIONS</key>
    145153                        <dict>
     
    161169                <dict>
    162170                        <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>
    171171                        <string>FirstResponder</string>
    172172                        <key>LANGUAGE</key>
     
    199199                                <string>NSPopUpButton</string>
    200200                        </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>
    201209                        <key>SUPERCLASS</key>
    202210                        <string>NSTextField</string>
  • trunk/Cocoa/Pester/Source/English.lproj/MainMenu.nib/info.nib

    r363 r364  
    1111        <key>IBOpenObjects</key>
    1212        <array>
    13                 <integer>169</integer>
     13                <integer>507</integer>
    1414        </array>
    1515        <key>IBSystem Version</key>
  • trunk/Cocoa/Pester/Source/Info-Pester.plist

    r363 r364  
    88        <string>Pester</string>
    99        <key>CFBundleGetInfoString</key>
    10         <string>Pester 1.1b5, © 2002–07 Nicholas Riley</string>
     10        <string>Pester 1.1b6, © 2002–07 Nicholas Riley</string>
    1111        <key>CFBundleIconFile</key>
    1212        <string>Application icon</string>
     
    2020        <string>APPL</string>
    2121        <key>CFBundleShortVersionString</key>
    22         <string>1.1b5</string>
     22        <string>1.1b6</string>
    2323        <key>CFBundleSignature</key>
    2424        <string>Pest</string>
    2525        <key>CFBundleVersion</key>
    26         <string>21</string>
     26        <string>22</string>
    2727        <key>NSMainNibFile</key>
    2828        <string>MainMenu</string>
  • trunk/Cocoa/Pester/Source/NJRHotKey.m

    r355 r364  
    9393{
    9494    if ( (self = [self init]) != nil) {
    95         NS_DURING
     95        @try {
    9696            hotKeyCharacters = [[dict objectForKey: PLCharacters] retain];
    9797            hotKeyModifierFlags = [[dict objectForKey: PLModifierFlags] unsignedIntValue];
    9898            hotKeyCode = [[dict objectForKey: PLKeyCode] unsignedShortValue];
    99         NS_HANDLER
    100         NS_ENDHANDLER
     99        }
     100        @catch (NSException *exception) {
     101        }
    101102        if (hotKeyCharacters == nil || hotKeyCode == 0) {
    102103            [self release];
  • trunk/Cocoa/Pester/Source/NJRIntervalField.h

    r53 r364  
    1010
    1111
    12 @interface NJRIntervalField : NSTextField {
     12#import "NJRValidatingField.h"
     13
     14@interface NJRIntervalField : NJRValidatingField {
    1315    IBOutlet NSPopUpButton *intervalUnits;
    1416}
     
    1719- (BOOL)setInterval:(NSTimeInterval)interval; // returns false if out of range
    1820
    19 - (void)handleDidFailToFormatString:(NSString *)string errorDescription:(NSString *)error label:(NSString *)label;
    2021
    2122@end
  • trunk/Cocoa/Pester/Source/NJRIntervalField.m

    r355 r364  
    8080}
    8181
    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 method
    152     if (returnCode == NSAlertOtherReturn) { // cancel
    153         [self abortEditing]; // abort edit session and reinstate original value
    154         [self _propagateValidationChange];
    155     } else if (returnCode == NSAlertAlternateReturn) { // set to min/max/default value
    156         [self setObjectValue: [(NSDictionary *)contextInfo objectForKey: @"proposedValue"]];
    157         [self validateEditing];
    158         [self _propagateValidationChange];
    159     }
    160     [(NSDictionary *)contextInfo release];
    161 }
    162 
    16382@end
  • trunk/Cocoa/Pester/Source/NJRTableDelegate.m

    r53 r364  
    225225@end
    226226
    227 @implementation NJRTableDelegate (NJRTableViewDelegate)
     227@implementation NJRTableDelegate (NSTableViewDelegate)
    228228
    229229- (void)tableView:(NSTableView *)aTableView didClickTableColumn:(NSTableColumn *)inTableColumn
     
    242242    [self _positionTypeSelectDisplay];
    243243}
     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)
    244258
    245259- (void)tableView:(NSTableView *)aTableView selectRowMatchingString:(NSString *)matchString;
  • trunk/Cocoa/Pester/Source/NJRTableView.h

    r53 r364  
    1111
    1212@interface NJRTableView : NSTableView {
    13     NSMutableDictionary *toolTipRegionList;
    1413    NSMutableString *typed;
    1514    IBOutlet id typeSelectDisplay;
     
    3029
    3130- (void)removeSelectedRowsFromTableView:(NSTableView *)tableView;
    32 - (NSString *)tableView:(NSTableView *)aTableView toolTipForTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex;
     31- (NSString *)toolTipForRow:(int)rowIndex;
    3332
    3433@end
  • trunk/Cocoa/Pester/Source/NJRTableView.m

    r102 r364  
    1717
    1818@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 tips
    35 
    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 tip
    58     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 it
    67     NSNumber *toolTipTag;
    68     NSRect result = [super frameOfCellAtColumn: columnIndex row: rowIndex];
    69     // check if cell is already in the list
    70     NSString *cellKey = [self _keyForColumn: columnIndex row: rowIndex];
    71     // remove old region
    72     if (toolTipTag = [toolTipRegionList objectForKey: cellKey])
    73         [self removeToolTip: [toolTipTag intValue]];
    74     // add new region
    75     [toolTipRegionList setObject: [NSNumber numberWithInt: [self addToolTipRect: result owner: self userData: cellKey]] forKey: cellKey];
    76     return [super frameOfCellAtColumn: columnIndex row: rowIndex];
    77 }
    7819
    7920#pragma mark type selection
     
    162103}
    163104
    164 #pragma mark row coloring
    165 
    166 - (void)drawGridInClipRect:(NSRect)rect;
    167 {
    168     NSRange columnRange = [self columnsInRect: rect];
    169     int i;
    170     // match iTunesÕ grid color
    171     [[[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 color
    190         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 
    207105@end
  • trunk/Cocoa/Pester/Source/NJRVoicePopUpButton.h

    r53 r364  
    88
    99#import <AppKit/AppKit.h>
    10 #import "SUSpeaker.h"
    1110
    1211@interface NJRVoicePopUpButton : NSPopUpButton {
    1312    id _delegate;
    14     SUSpeaker *_speaker;
     13    NSSpeechSynthesizer *_speaker;
    1514}
    1615
  • trunk/Cocoa/Pester/Source/NJRVoicePopUpButton.m

    r355 r364  
    1515    NSMenu *menu;
    1616    NSMenuItem *item;
    17     NSArray *voiceNames = [SUSpeaker voiceNames];
     17    NSArray *voices = [NSSpeechSynthesizer availableVoices];
    1818
    1919    [self removeAllItems];
     
    2424    [item setEnabled: NO];
    2525    [menu addItem: [NSMenuItem separatorItem]];
    26     if (voiceNames == nil || [voiceNames count] == 0) {
     26    if (voices == nil || [voices count] == 0) {
    2727        item = [menu addItemWithTitle: NSLocalizedString(@"Can't locate voices", "Voice popup menu item surrogate for voice list if no voices are found") action: nil keyEquivalent: @""];
    2828        [item setEnabled: NO];
    2929    } 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];
    3437            [item setTarget: self];
    3538        }
    3639    }
    37     if (_speaker == nil) [self selectItemWithTitle: [SUSpeaker defaultVoice]];
     40    if (_speaker == nil)
     41        [self selectItemAtIndex: [menu indexOfItemWithRepresentedObject: [NSSpeechSynthesizer defaultVoice]]];
    3842}
    3943
     
    5458}
    5559
    56 - (SUSpeaker *)_speaker;
     60- (NSSpeechSynthesizer *)_speaker;
    5761{
    58     if (_speaker == nil) _speaker = [[SUSpeaker alloc] init];
     62    if (_speaker == nil) _speaker = [[NSSpeechSynthesizer alloc] initWithVoice: nil];
    5963    return _speaker;
    6064}
     
    6872- (void)setVoice:(NSString *)voice;
    6973{
    70     int voiceIdx = [self indexOfItemWithTitle: voice];
     74    int voiceIdx = [self indexOfItemWithRepresentedObject: voice];
    7175    if (voiceIdx == -1) {
    7276        [self _invalidateVoiceSelection];
     
    7882- (void)_previewVoice;
    7983{
    80     NSString *voiceName = [self titleOfSelectedItem];
     84    NSString *voice = [[self selectedItem] representedObject];
    8185    NSString *previewString = nil;
    82     VoiceSpec voice;
    83     OSStatus err = noErr;
    84     VoiceDescription info;
    85     short voiceIndex = [[SUSpeaker voiceNames] indexOfObject: voiceName] + 1;
    8686
    8787    [_speaker stopSpeaking];
    8888
    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]);
    9192        [self _invalidateVoiceSelection];
    9293        return;
     
    9495
    9596    if (_delegate != nil && [_delegate respondsToSelector: @selector(voicePopUpButton:previewStringForVoice:)]) {
    96         previewString = [_delegate voicePopUpButton: self previewStringForVoice: voiceName];
     97        previewString = [_delegate voicePopUpButton: self previewStringForVoice: voice];
    9798    }
    9899
    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];
    108102
    109     [[self _speaker] setVoice: voiceIndex];
    110     [_speaker speakText: previewString];
     103    [_speaker startSpeakingString: previewString];
    111104}
    112105
  • trunk/Cocoa/Pester/Source/PSAlarm.m

    r358 r364  
    357357
    358358    [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]];
    360360    if (alertList != nil) {
    361361        [string appendAttributedString: alertList];
     
    415415        // 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)
    416416        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.
    418424            alarmType = PSAlarmInterval;
    419425            [self setInterval: savedInterval];
     
    563569        }
    564570        [self setMessage: [coder decodeObject]];
    565         if (alarmType == PSAlarmSet) {
     571        if (alarmType == PSAlarmSet)
    566572            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])
    569575    }
    570576    return self;
  • trunk/Cocoa/Pester/Source/PSAlarmSetController.h

    r361 r364  
    1313@class NJRIntervalField;
    1414@class NJRQTMediaPopUpButton;
     15@class NJRValidatingField;
    1516@class NJRVoicePopUpButton;
    1617
     
    3435    IBOutlet NJRQTMediaPopUpButton *sound;
    3536    IBOutlet NSButton *soundVolumeButton;
    36     IBOutlet NSTextField *soundRepetitions;
     37    IBOutlet NJRValidatingField *soundRepetitions;
    3738    IBOutlet NSStepper *soundRepetitionStepper;
    3839    IBOutlet NSTextField *soundRepetitionsLabel;
  • trunk/Cocoa/Pester/Source/PSAlarmSetController.m

    r363 r364  
    1818#import "NJRQTMediaPopUpButton.h"
    1919#import "NJRSoundManager.h"
     20#import "NJRValidatingField.h"
    2021#import "NJRVoicePopUpButton.h"
    2122#import "NSString-NJRExtensions.h"
     
    8788    {
    8889        NSDictionary *plAlerts = [defaults dictionaryForKey: PSAlertsSelected];
    89         PSAlerts *alerts;
     90        PSAlerts *alerts = nil;
    9091        if (plAlerts == nil) {
    9192            alerts = [[PSAlerts alloc] initWithPesterVersion1Alerts];
    9293        } else {
    93             NS_DURING
     94            @try {
    9495                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]);
    9798                alerts = [[PSAlerts alloc] initWithPesterVersion1Alerts];
    98             NS_ENDHANDLER
     99            }
    99100        }
    100101        [self _readAlerts: alerts];
     
    199200    old = [inAtMatrix cellWithTag: isInterval];
    200201    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   
    201218    [old setKeyEquivalent: [new keyEquivalent]];
    202219    [old setKeyEquivalentModifierMask: [new keyEquivalentModifierMask]];
     
    211228    [timeCalendarButton setEnabled: !isInterval];
    212229    if (sender != nil)
    213         [[self window] makeFirstResponder: isInterval ? (NSTextField *)timeInterval : timeOfDay];
    214     if (!isInterval) { // need to do this every time the controls are enabled
     230        [[self window] makeFirstResponder: isInterval ? (NSTextField *)timeInterval : timeOfDay];
     231    if (!isInterval) // need to do this every time the controls are enabled
    215232        [timeOfDay setNextKeyView: timeDate];
    216     }
    217233    // NSLog(@"UPDATING FROM inAtChanged");
    218234    [self update: nil];
     
    337353{
    338354    BOOL playSoundSelected = [playSound intValue];
    339     BOOL canRepeat = playSoundSelected ? [sound canRepeat] : NO;
    340     [sound setEnabled: NO]; //playSoundSelected]; // XXX temporary for 1.1b5
     355    BOOL canRepeat = playSoundSelected; // ? [sound canRepeat] : NO; // XXX temporary for 1.1b6
     356    [sound setEnabled: playSoundSelected];
    341357    [soundRepetitions setEnabled: canRepeat];
    342358    [soundVolumeButton setEnabled: canRepeat && [sound hasAudio]];
     
    344360    [soundRepetitionsLabel setTextColor: canRepeat ? [NSColor controlTextColor] : [NSColor disabledControlTextColor]];
    345361    if (playSoundSelected && sender == playSound) {
    346         [[self window] makeFirstResponder: sound];
     362        [[self window] makeFirstResponder: soundRepetitions]; // sound]; // XXX temporary for 1.1b6
    347363    }
    348364}
     
    437453   
    438454    [alerts removeAlerts];
    439     NS_DURING
     455    @try {
    440456        // dock bounce alert
    441457        if ([bounceDockIcon state] == NSOnState)
     
    467483        // speech alert
    468484        if ([doSpeak intValue])
    469             [alerts addAlert: [PSSpeechAlert alertWithVoice: [voice titleOfSelectedItem]]];
     485            [alerts addAlert: [PSSpeechAlert alertWithVoice: [[voice selectedItem] representedObject]]];
    470486        // wake alert
    471487        if ([wakeUp intValue])
    472488            [alerts addAlert: [PSWakeAlert alert]];
    473489        [[NSUserDefaults standardUserDefaults] setObject: [alerts propertyListRepresentation] forKey: PSAlertsSelected];
    474     NS_HANDLER
    475         [self setStatus: [localException reason]];
    476         NS_VALUERETURN(NO, BOOL);
    477     NS_ENDHANDLER
     490    } @catch (NSException *exception) {
     491        [self setStatus: [exception reason]];
     492        return NO;
     493    }
    478494    return YES;
    479495}
     
    540556    if (control == timeInterval)
    541557        [timeInterval handleDidFailToFormatString: string errorDescription: error label: @"alarm interval"];
     558    else if (control == soundRepetitions)
     559        [soundRepetitions handleDidFailToFormatString: string errorDescription: error label: @"alert repetitions"];
    542560    return NO;
    543561}
  • trunk/Cocoa/Pester/Source/PSAlarms.m

    r357 r364  
    178178    unsigned indexCount = [indices count], i = 0, alarmIndex;
    179179    unsigned *indexArray = (unsigned *)malloc(indexCount * sizeof(unsigned));
    180     NS_DURING
     180    @try {
    181181        while ( (n = [e nextObject]) != nil) {
    182182            alarmIndex = [n intValue];
     
    186186        }
    187187        [alarms removeObjectsFromIndices: indexArray numIndices: indexCount];
     188    } @finally {
    188189        free(indexArray); indexArray = NULL;
    189190        [self _changed];
    190     NS_HANDLER
    191         free(indexArray);
    192         [self _changed];
    193         [localException raise];
    194     NS_ENDHANDLER
     191    }
    195192}
    196193
     
    314311    NSData *alarmData;
    315312    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];
    325328    }
    326329}
  • trunk/Cocoa/Pester/Source/PSAlarmsController.m

    r355 r364  
    121121}
    122122
    123 - (NSString *)tableView:(NSTableView *)aTableView toolTipForTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex;
     123- (NSString *)toolTipForRow:(int)rowIndex;
    124124{
    125125    PSAlarm *alarm = [reorderedAlarms objectAtIndex: rowIndex];
    126 
     126   
    127127    return [[alarm prettyDescription] string];
    128128}
  • trunk/Cocoa/Pester/Source/PSAlerts.m

    r361 r364  
    132132{
    133133    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        }
    140145    }
    141146    return self;
  • trunk/Cocoa/Pester/Source/PSApplication.m

    r133 r364  
    215215        switch (answer) {
    216216            case NSAlertDefaultReturn:
    217                 NS_DURING
     217                @try {
    218218                    [allAlarms importVersion1Alarms];
    219                 NS_HANDLER
    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, [localException reason]);
    221                     NS_VOIDRETURN;
    222                 NS_ENDHANDLER
     219                } @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                }
    223223            case NSAlertAlternateReturn:
    224224                [allAlarms discardVersion1Alarms];
  • trunk/Cocoa/Pester/Source/PSMediaAlert.m

    r133 r364  
    2323{
    2424    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;
    2631    }
    2732    return self;
  • trunk/Cocoa/Pester/Source/PSSpeechAlert.h

    r61 r364  
    99#import "PSAlert.h"
    1010
    11 @class SUSpeaker;
    12 
    1311@interface PSSpeechAlert : PSAlert {
    14     SUSpeaker *speaker;
     12    NSSpeechSynthesizer *speaker;
    1513    NSString *voice;
    1614    PSAlarm *alarm;
  • trunk/Cocoa/Pester/Source/PSSpeechAlert.m

    r102 r364  
    1010#import "PSAlarmAlertController.h"
    1111#import "NSDictionary-NJRExtensions.h"
    12 #import "SUSpeaker.h"
    1312
    1413// property list keys
     
    5251    [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(_stopSpeaking:) name: PSAlarmAlertStopNotification object: nil];
    5352   
    54     if ( (speaker = [[SUSpeaker alloc] init]) == nil) return;
     53    if ( (speaker = [[NSSpeechSynthesizer alloc] initWithVoice: voice]) == nil) return;
    5554    alarm = anAlarm;
    5655    [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]];
    6257}
    6358
     
    7469{
    7570    NSMutableDictionary *plAlert = [[super propertyListRepresentation] mutableCopy];
     71    if (voice == nil)
     72        @throw [NSException exceptionWithName: NSInvalidArgumentException
     73                                       reason: @"The selected voice is not available." userInfo: nil];
    7674    [plAlert setObject: voice forKey: PLAlertVoice];
    7775    return [plAlert autorelease];
     
    8886@end
    8987
    90 @implementation PSSpeechAlert (SUSpeakerDelegate)
     88@implementation PSSpeechAlert (NSSpeechSynthesizerDelegate)
    9189
    92 - (void)didFinishSpeaking:(SUSpeaker *)aSpeaker;
     90- (void)speechSynthesizer:(NSSpeechSynthesizer *)sender didFinishSpeaking:(BOOL)finishedSpeaking;
    9391{
    9492    [self completedForAlarm: alarm];
  • trunk/Cocoa/Pester/Source/PSTimer.m

    r355 r364  
    230230        if ([date timeIntervalSinceNow] > 30) {
    231231            // NSLog(@"going to sleep, setting timer %@", PSTimerOnWake);
    232             NS_DURING
     232            @try {
    233233                [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            }
    237238            return YES;
    238239        } else {
  • trunk/Cocoa/Pester/Source/Pester.xcodeproj/nicholas.mode2v3

    r363 r364  
    230230                                        <array>
    231231                                                <dict>
     232                                                        <key>BecomeActive</key>
     233                                                        <true/>
    232234                                                        <key>ContentConfiguration</key>
    233235                                                        <dict>
     
    259261                                                                                <string>29B97314FDCFA39411CA2CEA</string>
    260262                                                                                <string>080E96DDFE201D6D7F000001</string>
     263                                                                                <string>F560E311035787D501A4E466</string>
     264                                                                                <string>F560E314035787F901A4E466</string>
     265                                                                                <string>F59E47AF036AAC31016B311C</string>
     266                                                                                <string>F560E312035787E001A4E466</string>
    261267                                                                                <string>29B97317FDCFA39411CA2CEA</string>
     268                                                                                <string>E10E71F3040C335800050002</string>
     269                                                                                <string>E19DCBE503BE516000B934BF</string>
    262270                                                                                <string>E17562BC0CF8E7A800FC5057</string>
    263271                                                                        </array>
     
    265273                                                                        <array>
    266274                                                                                <array>
    267                                                                                         <integer>1</integer>
     275                                                                                        <integer>110</integer>
     276                                                                                        <integer>108</integer>
    268277                                                                                        <integer>0</integer>
    269278                                                                                </array>
    270279                                                                        </array>
    271280                                                                        <key>PBXSmartGroupTreeModuleOutlineStateVisibleRectKey</key>
    272                                                                         <string>{{0, 0}, {334, 441}}</string>
     281                                                                        <string>{{0, 1497}, {334, 441}}</string>
    273282                                                                </dict>
    274283                                                                <key>PBXTopSmartGroupGIDs</key>
     
    289298                                                                </array>
    290299                                                                <key>RubberWindowFrame</key>
    291                                                                 <string>1570 651 351 527 0 0 1920 1178 </string>
     300                                                                <string>1570 647 351 527 0 0 1920 1178 </string>
    292301                                                        </dict>
    293302                                                        <key>Module</key>
     
    329338                                                                        <array>
    330339                                                                                <array>
    331                                                                                         <integer>2</integer>
     340                                                                                        <integer>0</integer>
    332341                                                                                </array>
    333342                                                                        </array>
     
    429438                        <key>TableOfContents</key>
    430439                        <array>
    431                                 <string>E1F961A10CF9F8E70087C980</string>
    432                                 <string>E1F961A20CF9F8E70087C980</string>
     440                                <string>E15045D00CFCF47100DE47E9</string>
     441                                <string>E15045D10CFCF47100DE47E9</string>
    433442                                <string>1C9437FD063B20B00039CFAC</string>
    434443                                <string>1C9437FE063B20B00039CFAC</string>
     
    463472        <key>WindowOrderList</key>
    464473        <array>
     474                <string>E1B123120CF664D6004975AA</string>
    465475                <string>/Users/nicholas/Documents/Development/Pester/Source/Pester.xcodeproj</string>
    466                 <string>E1B123120CF664D6004975AA</string>
    467476        </array>
    468477        <key>WindowString</key>
    469         <string>1570 651 351 527 0 0 1920 1178 </string>
     478        <string>1570 647 351 527 0 0 1920 1178 </string>
    470479        <key>WindowToolsV3</key>
    471480        <array>
     
    620629                                        <array>
    621630                                                <dict>
     631                                                        <key>BecomeActive</key>
     632                                                        <true/>
    622633                                                        <key>ContentConfiguration</key>
    623634                                                        <dict>
     
    625636                                                                <string>1CD0528F0623707200166675</string>
    626637                                                                <key>PBXProjectModuleLabel</key>
    627                                                                 <string></string>
     638                                                                <string>NJRValidatingField.h</string>
    628639                                                                <key>StatusBarVisibility</key>
    629640                                                                <true/>
     
    642653                                                </dict>
    643654                                                <dict>
    644                                                         <key>BecomeActive</key>
    645                                                         <true/>
    646655                                                        <key>ContentConfiguration</key>
    647656                                                        <dict>
     
    683692                        <array>
    684693                                <string>1C530D52069F1CE1000CFCEE</string>
    685                                 <string>E175647E0CF9EA4700FC5057</string>
     694                                <string>E15043790CFB91AF00DE47E9</string>
    686695                                <string>1CD0528F0623707200166675</string>
    687696                                <string>XCMainBuildResultsModuleGUID</string>
     
    725734                                                                                <key>sizes</key>
    726735                                                                                <array>
    727                                                                                         <string>{{0, 0}, {445, 380}}</string>
    728                                                                                         <string>{{445, 0}, {536, 380}}</string>
     736                                                                                        <string>{{0, 0}, {445, 368}}</string>
     737                                                                                        <string>{{445, 0}, {536, 368}}</string>
    729738                                                                                </array>
    730739                                                                        </dict>
     
    741750                                                                                <key>sizes</key>
    742751                                                                                <array>
    743                                                                                         <string>{{0, 0}, {981, 380}}</string>
    744                                                                                         <string>{{0, 380}, {981, 338}}</string>
     752                                                                                        <string>{{0, 0}, {981, 368}}</string>
     753                                                                                        <string>{{0, 368}, {981, 350}}</string>
    745754                                                                                </array>
    746755                                                                        </dict>
     
    775784                                                                        </array>
    776785                                                                        <key>Frame</key>
    777                                                                         <string>{{445, 0}, {536, 380}}</string>
     786                                                                        <string>{{445, 0}, {536, 368}}</string>
    778787                                                                        <key>RubberWindowFrame</key>
    779                                                                         <string>491 171 981 759 0 0 1920 1178 </string>
     788                                                                        <string>843 200 981 759 0 0 1920 1178 </string>
    780789                                                                </dict>
    781790                                                                <key>RubberWindowFrame</key>
    782                                                                 <string>491 171 981 759 0 0 1920 1178 </string>
     791                                                                <string>843 200 981 759 0 0 1920 1178 </string>
    783792                                                        </dict>
    784793                                                        <key>Module</key>
     
    803812                        <array>
    804813                                <string>1C530D54069F1CE1000CFCEE</string>
    805                                 <string>E17564230CF9EA2400FC5057</string>
     814                                <string>E15043670CFB8D4800DE47E9</string>
    806815                                <string>1C162984064C10D400B95A72</string>
    807                                 <string>E17564240CF9EA2400FC5057</string>
    808                                 <string>E17564250CF9EA2400FC5057</string>
    809                                 <string>E17564260CF9EA2400FC5057</string>
    810                                 <string>E17564270CF9EA2400FC5057</string>
    811                                 <string>E17564280CF9EA2400FC5057</string>
     816                                <string>E15043680CFB8D4800DE47E9</string>
     817                                <string>E15043690CFB8D4800DE47E9</string>
     818                                <string>E150436A0CFB8D4800DE47E9</string>
     819                                <string>E150436B0CFB8D4800DE47E9</string>
     820                                <string>E150436C0CFB8D4800DE47E9</string>
    812821                        </array>
    813822                        <key>ToolbarConfiguration</key>
    814823                        <string>xcode.toolbar.config.debugV3</string>
    815824                        <key>WindowString</key>
    816                         <string>491 171 981 759 0 0 1920 1178 </string>
     825                        <string>843 200 981 759 0 0 1920 1178 </string>
    817826                        <key>WindowToolGUID</key>
    818827                        <string>1C530D54069F1CE1000CFCEE</string>
     
    841850                                                                                <string>1CDD528C0622207200134675</string>
    842851                                                                                <key>PBXProjectModuleLabel</key>
    843                                                                                 <string>&lt;No Editor&gt;</string>
     852                                                                                <string>PSApplication.m</string>
    844853                                                                                <key>StatusBarVisibility</key>
    845854                                                                                <true/>
     
    848857                                                                        <dict>
    849858                                                                                <key>Frame</key>
    850                                                                                 <string>{{0, 0}, {878, 347}}</string>
     859                                                                                <string>{{0, 0}, {878, 241}}</string>
    851860                                                                                <key>RubberWindowFrame</key>
    852                                                                                 <string>47 178 878 716 0 0 1920 1178 </string>
     861                                                                                <string>619 85 878 716 0 0 1920 1178 </string>
    853862                                                                        </dict>
    854863                                                                        <key>Module</key>
     
    859868                                                        </array>
    860869                                                        <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/>
    864875                                                        <key>ContentConfiguration</key>
    865876                                                        <dict>
     
    872883                                                        <dict>
    873884                                                                <key>Frame</key>
    874                                                                 <string>{{0, 352}, {878, 323}}</string>
     885                                                                <string>{{0, 246}, {878, 429}}</string>
    875886                                                                <key>RubberWindowFrame</key>
    876                                                                 <string>47 178 878 716 0 0 1920 1178 </string>
     887                                                                <string>619 85 878 716 0 0 1920 1178 </string>
    877888                                                        </dict>
    878889                                                        <key>Module</key>
    879890                                                        <string>PBXProjectFindModule</string>
    880891                                                        <key>Proportion</key>
    881                                                         <string>323pt</string>
     892                                                        <string>429pt</string>
    882893                                                </dict>
    883894                                        </array>
     
    897908                        <array>
    898909                                <string>1C530D57069F1CE1000CFCEE</string>
    899                                 <string>E17564860CF9F5F400FC5057</string>
    900                                 <string>E17564870CF9F5F400FC5057</string>
     910                                <string>E15043970CFBA77500DE47E9</string>
     911                                <string>E15043980CFBA77500DE47E9</string>
    901912                                <string>1CDD528C0622207200134675</string>
    902913                                <string>1CD0528E0623707200166675</string>
    903914                        </array>
    904915                        <key>WindowString</key>
    905                         <string>47 178 878 716 0 0 1920 1178 </string>
     916                        <string>619 85 878 716 0 0 1920 1178 </string>
    906917                        <key>WindowToolGUID</key>
    907918                        <string>1C530D57069F1CE1000CFCEE</string>
     
    938949                                                        <dict>
    939950                                                                <key>Frame</key>
    940                                                                 <string>{{0, 0}, {915, 284}}</string>
     951                                                                <string>{{0, 0}, {1144, 216}}</string>
    941952                                                                <key>RubberWindowFrame</key>
    942                                                                 <string>447 136 915 325 0 0 1920 1178 </string>
     953                                                                <string>677 91 1144 257 0 0 1920 1178 </string>
    943954                                                        </dict>
    944955                                                        <key>Module</key>
    945956                                                        <string>PBXDebugCLIModule</string>
    946957                                                        <key>Proportion</key>
    947                                                         <string>284pt</string>
     958                                                        <string>216pt</string>
    948959                                                </dict>
    949960                                        </array>
    950961                                        <key>Proportion</key>
    951                                         <string>284pt</string>
     962                                        <string>216pt</string>
    952963                                </dict>
    953964                        </array>
     
    963974                        <array>
    964975                                <string>1C530D5B069F1CE1000CFCEE</string>
    965                                 <string>E17564290CF9EA2400FC5057</string>
     976                                <string>E150436D0CFB8D4800DE47E9</string>
    966977                                <string>1C78EAAC065D492600B07095</string>
    967978                        </array>
     
    969980                        <string>xcode.toolbar.config.consoleV3</string>
    970981                        <key>WindowString</key>
    971                         <string>447 136 915 325 0 0 1920 1178 </string>
     982                        <string>677 91 1144 257 0 0 1920 1178 </string>
    972983                        <key>WindowToolGUID</key>
    973984                        <string>1C530D5B069F1CE1000CFCEE</string>
     
    10341045                                                        <dict>
    10351046                                                                <key>Frame</key>
    1036                                                                 <string>{{0, 0}, {545, 0}}</string>
     1047                                                                <string>{{0, 0}, {586, 0}}</string>
    10371048                                                                <key>RubberWindowFrame</key>
    1038                                                                 <string>934 569 545 283 0 0 1920 1178 </string>
     1049                                                                <string>960 488 586 680 0 0 1920 1178 </string>
    10391050                                                        </dict>
    10401051                                                        <key>Module</key>
     
    10541065                                                                        <key>PBXCVSModuleTreeModuleColumnWidthsKey</key>
    10551066                                                                        <array>
    1056                                                                                 <real>216</real>
     1067                                                                                <real>257</real>
    10571068                                                                                <real>40.66162109375</real>
    10581069                                                                                <real>53</real>
     
    10751086                                                                <key>PBXProjectModuleLabel</key>
    10761087                                                                <string>SCM Results</string>
    1077                                                                 <key>SCMActivityViewerShowingDefaultKey</key>
    1078                                                                 <string>{{0, 237}, {545, 0}}</string>
    10791088                                                        </dict>
    10801089                                                        <key>GeometryConfiguration</key>
    10811090                                                        <dict>
    10821091                                                                <key>Frame</key>
    1083                                                                 <string>{{0, 5}, {545, 237}}</string>
     1092                                                                <string>{{0, 5}, {586, 634}}</string>
    10841093                                                                <key>RubberWindowFrame</key>
    1085                                                                 <string>934 569 545 283 0 0 1920 1178 </string>
     1094                                                                <string>960 488 586 680 0 0 1920 1178 </string>
    10861095                                                        </dict>
    10871096                                                        <key>Module</key>
    10881097                                                        <string>PBXCVSModule</string>
    10891098                                                        <key>Proportion</key>
    1090                                                         <string>237pt</string>
     1099                                                        <string>634pt</string>
    10911100                                                </dict>
    10921101                                        </array>
    10931102                                        <key>Proportion</key>
    1094                                         <string>242pt</string>
     1103                                        <string>639pt</string>
    10951104                                </dict>
    10961105                        </array>
     
    11061115                        <array>
    11071116                                <string>E1B123120CF664D6004975AA</string>
    1108                                 <string>E1F961A30CF9F8E70087C980</string>
     1117                                <string>E150465E0CFCFB0200DE47E9</string>
    11091118                                <string>1C78EAB2065D492600B07095</string>
    11101119                                <string>1CD052920623707200166675</string>
     
    11131122                        <string>xcode.toolbar.config.scm</string>
    11141123                        <key>WindowString</key>
    1115                         <string>934 569 545 283 0 0 1920 1178 </string>
     1124                        <string>960 488 586 680 0 0 1920 1178 </string>
    11161125                        <key>WindowToolGUID</key>
    11171126                        <string>E1B123120CF664D6004975AA</string>
     
    12341243                        <key>TableOfContents</key>
    12351244                        <array>
    1236                                 <string>E1B1236F0CF67A4B004975AA</string>
    1237                                 <string>E1B123700CF67A4B004975AA</string>
     1245                                <string>E15043BB0CFCC31200DE47E9</string>
     1246                                <string>E15043BC0CFCC31200DE47E9</string>
    12381247                                <string>1CE0B1FE06471DED0097A5F4</string>
    12391248                                <string>1CA1AED706398EBD00589147</string>
     
    12441253                        <string>290 117 744 409 0 0 1920 1178 </string>
    12451254                        <key>WindowToolGUID</key>
    1246                         <string>E1B1236F0CF67A4B004975AA</string>
     1255                        <string>E15043BB0CFCC31200DE47E9</string>
    12471256                        <key>WindowToolIsVisible</key>
    12481257                        <false/>
     
    14271436                </dict>
    14281437                <dict>
     1438                        <key>FirstTimeWindowDisplayed</key>
     1439                        <false/>
    14291440                        <key>Identifier</key>
    14301441                        <string>windowTool.refactoring</string>
    14311442                        <key>IncludeInToolsMenu</key>
    14321443                        <integer>0</integer>
     1444                        <key>IsVertical</key>
     1445                        <true/>
    14331446                        <key>Layout</key>
    14341447                        <array>
     
    14371450                                        <array>
    14381451                                                <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>
    14411457                                                        <key>GeometryConfiguration</key>
    14421458                                                        <dict>
    14431459                                                                <key>Frame</key>
    1444                                                                 <string>{0, 0}, {500, 335}</string>
     1460                                                                <string>{{0, 0}, {891, 710}}</string>
    14451461                                                                <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>
    14471467                                                        </dict>
    14481468                                                        <key>Module</key>
    14491469                                                        <string>XCRefactoringModule</string>
    14501470                                                        <key>Proportion</key>
    1451                                                         <string>100%</string>
     1471                                                        <string>710pt</string>
    14521472                                                </dict>
    14531473                                        </array>
    14541474                                        <key>Proportion</key>
    1455                                         <string>100%</string>
     1475                                        <string>710pt</string>
    14561476                                </dict>
    14571477                        </array>
     
    14621482                                <string>XCRefactoringModule</string>
    14631483                        </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>
    14641492                        <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/>
    14661498                </dict>
    14671499        </array>
  • trunk/Cocoa/Pester/Source/Pester.xcodeproj/nicholas.pbxuser

    r363 r364  
    33        089C165DFE840E0CC02AAC07 /* English */ = {
    44                uiCtxt = {
    5                         sepNavIntBoundsRect = "{{0, 0}, {813, 876}}";
    6                         sepNavSelRange = "{145, 0}";
     5                        sepNavIntBoundsRect = "{{0, 0}, {813, 899}}";
     6                        sepNavSelRange = "{105, 0}";
    77                        sepNavVisRange = "{0, 229}";
    88                        sepNavWindowFrame = "{{15, 238}, {872, 935}}";
     
    1919                        F596730D0355CFA301407038 /* -[_NSZombie methodSignatureForSelector:] */,
    2020                        F500E5370359719B01AEEDB1 /* szone_error */,
    21                         F5B15F74037E42EB01AEEDB1 /* -[NSException raise] */,
    2221                        E1A9DEE703BF3C110089E8B2 /* -[_NSZombie release] */,
    23                         E145384C043A31D900050002 /* NJRHotKeyManager.m:158 */,
    2422                        E17CA6640CF697FE00018B34 /* SetPortRGBForeColor */,
     23                        E15043CF0CFCC41500DE47E9 /* objc_exception_throw */,
    2524                );
    2625                codeSenseManager = E1B11EDD0CF5F2EB004975AA /* Code sense */;
     
    6059                                        315,
    6160                                        20,
    62                                         48.16259765625,
     61                                        48,
    6362                                        43,
    6463                                        43,
     
    7574                                );
    7675                        };
    77                         PBXPerProjectTemplateStateSaveDate = 217708774;
     76                        PBXPerProjectTemplateStateSaveDate = 217904241;
    7877                        "PBXTemplateGeometry-F5314676015831810DCA290F" = {
    7978                                ContentSize = "{618, 257}";
     
    794793                                },
    795794                        );
    796                         PBXWorkspaceStateSaveDate = 217708774;
     795                        PBXWorkspaceStateSaveDate = 217904241;
    797796                };
    798797                sourceControlManager = E1B11EDC0CF5F2EB004975AA /* Source Control */;
     
    806805                        sepNavSelRange = "{208, 0}";
    807806                        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}}";
    808815                };
    809816        };
     
    818825        E11373150439FCC700050002 /* NJRHotKey.m */ = {
    819826                uiCtxt = {
    820                         sepNavIntBoundsRect = "{{0, 0}, {830, 1287}}";
    821                         sepNavSelRange = "{1856, 46}";
    822                         sepNavVisRange = "{1263, 1577}";
     827                        sepNavIntBoundsRect = "{{0, 0}, {830, 1298}}";
     828                        sepNavSelRange = "{2509, 35}";
     829                        sepNavVisRange = "{1321, 1515}";
    823830                        sepNavWindowFrame = "{{199, 307}, {889, 698}}";
    824831                };
     
    854861        E130B9AD03B7C59700000028 /* PSPowerManager.m */ = {
    855862                uiCtxt = {
    856                         sepNavIntBoundsRect = "{{0, 0}, {817, 1045}}";
    857                         sepNavSelRange = "{386, 27}";
    858                         sepNavVisRange = "{24, 683}";
     863                        sepNavIntBoundsRect = "{{0, 0}, {817, 1078}}";
     864                        sepNavSelRange = "{387, 16}";
     865                        sepNavVisRange = "{180, 425}";
    859866                        sepNavWindowFrame = "{{153, 349}, {889, 698}}";
    860867                };
    861868        };
     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        };
    862877        E13919E303B9E4E100000028 /* NJRIntervalField.m */ = {
    863878                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}}";
    868883                };
    869884        };
     
    876891                };
    877892        };
    878         E145384C043A31D900050002 /* NJRHotKeyManager.m:158 */ = {
    879                 isa = PBXFileBreakpoint;
     893        E15043CF0CFCC41500DE47E9 /* objc_exception_throw */ = {
     894                isa = PBXSymbolicBreakpoint;
    880895                actions = (
    881896                );
    882                 breakpointStyle = 0;
     897                breakpointStyle = 1;
    883898                continueAfterActions = 0;
    884899                countType = 0;
    885900                delayBeforeContinue = 0;
    886                 fileReference = E145383F043A1DB200050002 /* NJRHotKeyManager.m */;
    887                 hitCount = 0;
     901                hitCount = 1;
    888902                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                };
    893922        };
    894923        E162698303B6189000000028 /* NSTableView-NJRExtensions.m */ = {
     
    933962                uiCtxt = {
    934963                        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}}";
    938967                };
    939968        };
     
    949978                ignoreCount = 0;
    950979                location = "";
    951                 modificationTime = 217621338.896014;
    952                 state = 0;
     980                modificationTime = 217892051.042254;
     981                state = 2;
    953982                symbolName = SetPortRGBForeColor;
    954983        };
     
    962991        E18DA4090442C56D00050002 /* PSMediaAlert.m */ = {
    963992                uiCtxt = {
    964                         sepNavIntBoundsRect = "{{0, 0}, {761, 792}}";
    965                         sepNavSelRange = "{618, 0}";
    966                         sepNavVisRange = "{3, 1720}";
     993                        sepNavIntBoundsRect = "{{0, 0}, {761, 847}}";
     994                        sepNavSelRange = "{643, 0}";
     995                        sepNavVisRange = "{0, 1827}";
    967996                        sepNavWindowFrame = "{{153, 208}, {820, 839}}";
    968997                };
     
    970999        E18DAAEB0442CC3E00050002 /* NJRSoundManager.m */ = {
    9711000                uiCtxt = {
    972                         sepNavIntBoundsRect = "{{0, 0}, {761, 1254}}";
    973                         sepNavSelRange = "{846, 134}";
    974                         sepNavVisRange = "{0, 2251}";
     1001                        sepNavIntBoundsRect = "{{0, 0}, {761, 1210}}";
     1002                        sepNavSelRange = "{576, 0}";
     1003                        sepNavVisRange = "{0, 2216}";
    9751004                        sepNavWindowFrame = "{{61, 292}, {820, 839}}";
    9761005                };
     
    9961025        E1A18CAC03B4344C00000028 /* PSAlerts.m */ = {
    9971026                uiCtxt = {
    998                         sepNavIntBoundsRect = "{{0, 0}, {830, 1617}}";
    999                         sepNavSelRange = "{2194, 0}";
    1000                         sepNavVisRange = "{1314, 2197}";
     1027                        sepNavIntBoundsRect = "{{0, 0}, {830, 1672}}";
     1028                        sepNavSelRange = "{3864, 7}";
     1029                        sepNavVisRange = "{1868, 2150}";
    10011030                        sepNavWindowFrame = "{{528, 47}, {889, 698}}";
    10021031                };
     
    10131042                ignoreCount = 0;
    10141043                location = "";
    1015                 modificationTime = 217621338.880709;
    1016                 state = 0;
     1044                modificationTime = 217892051.041767;
     1045                state = 2;
    10171046                symbolName = "-[_NSZombie release]";
    10181047        };
     
    10371066        E1B11F8B0CF5F30F004975AA /* Info-Pester.plist */ = {
    10381067                uiCtxt = {
    1039                         sepNavIntBoundsRect = "{{0, 0}, {736, 865}}";
    1040                         sepNavSelRange = "{981, 0}";
     1068                        sepNavIntBoundsRect = "{{0, 0}, {736, 888}}";
     1069                        sepNavSelRange = "{346, 0}";
    10411070                        sepNavVisRange = "{0, 2337}";
    10421071                        sepNavWindowFrame = "{{549, 47}, {795, 924}}";
     
    11131142        E1BF6E9103C928D200050002 /* PSTimer.m */ = {
    11141143                uiCtxt = {
    1115                         sepNavIntBoundsRect = "{{0, 0}, {940, 2908}}";
    1116                         sepNavSelRange = "{5491, 0}";
    1117                         sepNavVisRange = "{0, 3062}";
     1144                        sepNavIntBoundsRect = "{{0, 0}, {920, 2842}}";
     1145                        sepNavSelRange = "{4580, 0}";
     1146                        sepNavVisRange = "{409, 1359}";
    11181147                        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}}";
    11191164                };
    11201165        };
     
    11421187                };
    11431188        };
    1144         E1E9A33903C8EF6700050002 /* 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}}";
    11501195                };
    11511196        };
     
    12151260                ignoreCount = 0;
    12161261                location = libSystem.B.dylib;
    1217                 modificationTime = 217621338.572037;
    1218                 state = 1;
     1262                modificationTime = 217892051.041262;
     1263                state = 2;
    12191264                symbolName = szone_error;
    12201265        };
    12211266        F517D63E0356B80C016D68B9 /* PSAlarmsController.m */ = {
    12221267                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}";
    12271279                };
    12281280        };
    12291281        F517D6420356B8CC016D68B9 /* PSAlarms.m */ = {
    12301282                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}";
    12351294                };
    12361295        };
    12371296        F560E2F10357506401A4E466 /* PSApplication.m */ = {
    12381297                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}";
    12421301                        sepNavWindowFrame = "{{586, 75}, {820, 839}}";
    12431302                };
     
    12681327        F589C9C6035AA12B0155F4B2 /* Read Me.rtfd */ = {
    12691328                uiCtxt = {
    1270                         sepNavIntBoundsRect = "{{0, 0}, {960, 4459}}";
    1271                         sepNavSelRange = "{14260, 0}";
    1272                         sepNavVisRect = "{{0, 2212}, {960, 1091}}";
     1329                        sepNavIntBoundsRect = "{{0, 0}, {960, 4408}}";
     1330                        sepNavSelRange = "{16, 0}";
     1331                        sepNavVisRect = "{{0, 199}, {960, 1091}}";
    12731332                        sepNavWindowFrame = "{{15, 50}, {999, 1128}}";
    12741333                };
     
    12851344                ignoreCount = 0;
    12861345                location = "";
    1287                 modificationTime = 217621338.862668;
    1288                 state = 0;
     1346                modificationTime = 217892051.040556;
     1347                state = 2;
    12891348                symbolName = "-[_NSZombie methodSignatureForSelector:]";
    12901349        };
    12911350        F59DC6D30353C9E601AEEDB1 /* PSAlarmSetController.h */ = {
    12921351                uiCtxt = {
    1293                         sepNavIntBoundsRect = "{{0, 0}, {940, 1092}}";
    1294                         sepNavSelRange = "{945, 9}";
    1295                         sepNavVisRange = "{0, 2347}";
     1352                        sepNavIntBoundsRect = "{{0, 0}, {775, 1065}}";
     1353                        sepNavSelRange = "{1563, 0}";
     1354                        sepNavVisRange = "{0, 2381}";
    12961355                        sepNavWindowFrame = "{{23, 50}, {999, 1128}}";
    12971356                };
     
    12991358        F59DC6D40353C9E601AEEDB1 /* PSAlarmSetController.m */ = {
    13001359                uiCtxt = {
    1301                         sepNavIntBoundsRect = "{{0, 0}, {940, 6539}}";
    1302                         sepNavSelRange = "{4235, 0}";
    1303                         sepNavVisRange = "{2184, 4891}";
    1304                         sepNavWindowFrame = "{{507, 50}, {999, 1128}}";
     1360                        sepNavIntBoundsRect = "{{0, 0}, {775, 7139}}";
     1361                        sepNavSelRange = "{21486, 11}";
     1362                        sepNavVisRange = "{18453, 3820}";
     1363                        sepNavWindowFrame = "{{561, 54}, {834, 1124}}";
    13051364                };
    13061365        };
    13071366        F59DC6DC0353DE5101AEEDB1 /* PSAlarmNotifierController.m */ = {
    13081367                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}";
    13121371                        sepNavWindowFrame = "{{613, 82}, {820, 839}}";
    13131372                };
     
    13441403        F59E47A7036AAA6D016B311C /* PSAlert.m */ = {
    13451404                uiCtxt = {
    1346                         sepNavIntBoundsRect = "{{0, 0}, {761, 869}}";
    1347                         sepNavSelRange = "{1016, 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}}";
    13501409                };
    13511410        };
     
    13601419                uiCtxt = {
    13611420                        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}";
    13641431                        sepNavWindowFrame = "{{360, 78}, {1356, 780}}";
    13651432                };
     
    13961463                };
    13971464        };
     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        };
    13981480        F59E4BE6036B2E5E016B311C /* PSScriptAlert.m */ = {
    13991481                uiCtxt = {
     
    14141496        F59F6CB40354E7DA01AEEDB1 /* PSAlarm.h */ = {
    14151497                uiCtxt = {
    1416                         sepNavIntBoundsRect = "{{0, 0}, {830, 924}}";
     1498                        sepNavIntBoundsRect = "{{0, 0}, {993, 913}}";
    14171499                        sepNavSelRange = "{0, 0}";
    1418                         sepNavVisRange = "{0, 1854}";
     1500                        sepNavVisRange = "{0, 2636}";
     1501                        sepNavWindowFrame = "{{15, 240}, {1052, 933}}";
    14191502                };
    14201503        };
    14211504        F59F6CB50354E7DA01AEEDB1 /* PSAlarm.m */ = {
    14221505                uiCtxt = {
    1423                         sepNavIntBoundsRect = "{{0, 0}, {828, 6292}}";
    1424                         sepNavSelRange = "{823, 0}";
    1425                         sepNavVisRange = "{0, 2454}";
    1426                         sepNavWindowFrame = "{{214, 23}, {887, 884}}";
    1427                 };
    1428         };
    1429         F5B15F74037E42EB01AEEDB1 /* -[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                };
    14431526        };
    14441527        F5F1986C036B813101EB0372 /* PSSpeechAlert.m */ = {
    14451528                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}";
    14501540                };
    14511541        };
    14521542        F5F19870036B822E01EB0372 /* NJRVoicePopUpButton.m */ = {
    14531543                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}}";
    14581571                };
    14591572        };
  • trunk/Cocoa/Pester/Source/Pester.xcodeproj/project.pbxproj

    r363 r364  
    88
    99/* Begin PBXBuildFile section */
     10                E15044670CFCDC7E00DE47E9 /* NJRValidatingField.m in Sources */ = {isa = PBXBuildFile; fileRef = E15044660CFCDC7E00DE47E9 /* NJRValidatingField.m */; };
    1011                E17562620CF8C50B00FC5057 /* Sparkle.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E17562610CF8C50B00FC5057 /* Sparkle.framework */; };
    11                 E17562720CF8C53F00FC5057 /* Sparkle.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = E17562610CF8C50B00FC5057 /* Sparkle.framework */; };
     12                E17562720CF8C53F00FC5057 /* Sparkle.framework in Copy Sparkle.framework */ = {isa = PBXBuildFile; fileRef = E17562610CF8C50B00FC5057 /* Sparkle.framework */; };
    1213                E17CA7BB0CF7D08C00018B34 /* DynaLoader.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E17CA7BA0CF7D08C00018B34 /* DynaLoader.a */; };
    13                 E17CA9AB0CF7F8CB00018B34 /* Manip.pm in CopyFiles */ = {isa = PBXBuildFile; fileRef = E17CA9A90CF7F8C200018B34 /* Manip.pm */; };
     14                E17CA9AB0CF7F8CB00018B34 /* Manip.pm in Copy Perl Modules */ = {isa = PBXBuildFile; fileRef = E17CA9A90CF7F8C200018B34 /* Manip.pm */; };
    1415                E1B11F270CF5F30F004975AA /* Notifier.nib in Resources */ = {isa = PBXBuildFile; fileRef = F59DC6DF0353DF5E01AEEDB1 /* Notifier.nib */; };
    1516                E1B11F280CF5F30F004975AA /* Application icon.icns in Resources */ = {isa = PBXBuildFile; fileRef = F59DC6E30353ED1201AEEDB1 /* Application icon.icns */; };
     
    7576                E1B11F660CF5F30F004975AA /* PSError.m in Sources */ = {isa = PBXBuildFile; fileRef = E1ECA00703C002B300F54C66 /* PSError.m */; };
    7677                E1B11F670CF5F30F004975AA /* NJRCenteringMovieView.m in Sources */ = {isa = PBXBuildFile; fileRef = E1D358BA03C60CE900C8A18E /* NJRCenteringMovieView.m */; };
    77                 E1B11F680CF5F30F004975AA /* SUSpeaker.m in Sources */ = {isa = PBXBuildFile; fileRef = E1E9A33903C8EF6700050002 /* SUSpeaker.m */; };
    7878                E1B11F690CF5F30F004975AA /* PSTimer.m in Sources */ = {isa = PBXBuildFile; fileRef = E1BF6E9103C928D200050002 /* PSTimer.m */; };
    7979                E1B11F6A0CF5F30F004975AA /* PSWakeAlert.m in Sources */ = {isa = PBXBuildFile; fileRef = E19FD39F03C98645001509F3 /* PSWakeAlert.m */; };
     
    108108
    109109/* Begin PBXCopyFilesBuildPhase section */
    110                 E17562730CF8C55D00FC5057 /* CopyFiles */ = {
     110                E17562730CF8C55D00FC5057 /* Copy Sparkle.framework */ = {
    111111                        isa = PBXCopyFilesBuildPhase;
    112112                        buildActionMask = 2147483647;
     
    114114                        dstSubfolderSpec = 10;
    115115                        files = (
    116                                 E17562720CF8C53F00FC5057 /* Sparkle.framework in CopyFiles */,
    117                         );
     116                                E17562720CF8C53F00FC5057 /* Sparkle.framework in Copy Sparkle.framework */,
     117                        );
     118                        name = "Copy Sparkle.framework";
    118119                        runOnlyForDeploymentPostprocessing = 0;
    119120                };
    120                 E17CA9A80CF7F89900018B34 /* CopyFiles */ = {
     121                E17CA9A80CF7F89900018B34 /* Copy Perl Modules */ = {
    121122                        isa = PBXCopyFilesBuildPhase;
    122123                        buildActionMask = 2147483647;
     
    124125                        dstSubfolderSpec = 7;
    125126                        files = (
    126                                 E17CA9AB0CF7F8CB00018B34 /* Manip.pm in CopyFiles */,
    127                         );
     127                                E17CA9AB0CF7F8CB00018B34 /* Manip.pm in Copy Perl Modules */,
     128                        );
     129                        name = "Copy Perl Modules";
    128130                        runOnlyForDeploymentPostprocessing = 0;
    129131                };
     
    160162                E14DEC820438969400050002 /* NJRHotKeyFieldCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NJRHotKeyFieldCell.h; sourceTree = "<group>"; };
    161163                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>"; };
    162166                E162698303B6189000000028 /* NSTableView-NJRExtensions.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = "NSTableView-NJRExtensions.m"; sourceTree = "<group>"; };
    163167                E162698403B6189000000028 /* NSTableView-NJRExtensions.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = "NSTableView-NJRExtensions.h"; sourceTree = "<group>"; };
     
    221225                E1DEF116040014EB00050002 /* PSTimeDateEditor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PSTimeDateEditor.h; sourceTree = "<group>"; };
    222226                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>"; };
    225227                E1ECA00603C002B300F54C66 /* PSError.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PSError.h; sourceTree = SOURCE_ROOT; };
    226228                E1ECA00703C002B300F54C66 /* PSError.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PSError.m; sourceTree = SOURCE_ROOT; };
     
    395397                        isa = PBXGroup;
    396398                        children = (
    397                                 F5243DA40378681101AEEDB1 /* Popup triangle.tiff */,
    398399                                E18830410442B5FC00050002 /* Calendar icons */,
    399400                                E18830420442B60000050002 /* Volume icons */,
     401                                F5243DA40378681101AEEDB1 /* Popup triangle.tiff */,
    400402                                29B97318FDCFA39411CA2CEA /* MainMenu.nib */,
    401403                                F560E2EE03574F8A01A4E466 /* Alarms.nib */,
     
    526528                        );
    527529                        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;
    537530                        sourceTree = "<group>";
    538531                };
     
    582575                        isa = PBXGroup;
    583576                        children = (
    584                                 E1E9A33D03C8EF6800050002 /* SpeechUtilities */,
    585577                                F59E47A6036AA5FC016B311C /* BDAlias */,
    586578                                E1DEF116040014EB00050002 /* PSTimeDateEditor.h */,
     
    633625                                F5F240CD036A877301FE7503 /* NJRQTMediaPopUpButton.h */,
    634626                                F5F240CC036A877301FE7503 /* NJRQTMediaPopUpButton.m */,
     627                                E15044650CFCDC7E00DE47E9 /* NJRValidatingField.h */,
     628                                E15044660CFCDC7E00DE47E9 /* NJRValidatingField.m */,
    635629                                F5F19871036B822E01EB0372 /* NJRVoicePopUpButton.h */,
    636630                                F5F19870036B822E01EB0372 /* NJRVoicePopUpButton.m */,
     
    685679                                E1B11F7E0CF5F30F004975AA /* Frameworks */,
    686680                                E1B11F260CF5F30F004975AA /* Resources */,
    687                                 E17CA9A80CF7F89900018B34 /* CopyFiles */,
    688                                 E17562730CF8C55D00FC5057 /* CopyFiles */,
    689                                 E1B11F860CF5F30F004975AA /* ShellScript */,
     681                                E17CA9A80CF7F89900018B34 /* Copy Perl Modules */,
     682                                E17562730CF8C55D00FC5057 /* Copy Sparkle.framework */,
    690683                        );
    691684                        buildRules = (
     
    749742                };
    750743/* 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 */
    763744
    764745/* Begin PBXSourcesBuildPhase section */
     
    806787                                E1B11F660CF5F30F004975AA /* PSError.m in Sources */,
    807788                                E1B11F670CF5F30F004975AA /* NJRCenteringMovieView.m in Sources */,
    808                                 E1B11F680CF5F30F004975AA /* SUSpeaker.m in Sources */,
    809789                                E1B11F690CF5F30F004975AA /* PSTimer.m in Sources */,
    810790                                E1B11F6A0CF5F30F004975AA /* PSWakeAlert.m in Sources */,
     
    830810                                E1B121970CF62FD1004975AA /* NSMenuItem-NJRExtensions.m in Sources */,
    831811                                E1B1219E0CF63858004975AA /* NSImage-NJRExtensions.m in Sources */,
     812                                E15044670CFCDC7E00DE47E9 /* NJRValidatingField.m in Sources */,
    832813                        );
    833814                        runOnlyForDeploymentPostprocessing = 0;
     
    966947                        buildSettings = {
    967948                                COPY_PHASE_STRIP = NO;
    968                                 CURRENT_PROJECT_VERSION = 21;
     949                                CURRENT_PROJECT_VERSION = 22;
    969950                                FRAMEWORK_SEARCH_PATHS = (
    970951                                        "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
     
    1004985                        buildSettings = {
    1005986                                COPY_PHASE_STRIP = YES;
    1006                                 CURRENT_PROJECT_VERSION = 21;
     987                                CURRENT_PROJECT_VERSION = 22;
    1007988                                FRAMEWORK_SEARCH_PATHS = (
    1008989                                        "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
  • trunk/Cocoa/Pester/Updates/release-notes.html

    r363 r364  
    99<body>
    1010<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>
    1212        <tr><td class="icon"></td>
    1313                <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>
    1522                </td>
    1623        </tr>
  • trunk/Cocoa/Pester/Updates/updates.xml

    r363 r364  
    55    <link>http://web.sabi.net/nriley/software/#pester</link>
    66    <description>Appcast for Pester updates.</description>
    7     <generator>Feeder 1.4.9.v2 http://reinventedsoftware.com/feeder/</generator>
    87    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    98    <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>
    1211   
    1312    <atom:link href="http://web.sabi.net/nriley/software/Pester/updates.xml" rel="self" type="application/rss+xml"/>
    1413    <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>
    1523      <title>Pester 1.1b5</title>
    1624      <link>http://web.sabi.net/nriley/software/#pester</link>
    17       <author>pester@sabi.net</author>
     25      <author>pester@sabi.net (Nicholas Riley)</author>
    1826      <pubDate>Sat, 24 Nov 2007 17:14:47 -0600</pubDate>
    1927      <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  
    88# gather information
    99cd "$PACKAGEDIR"/Source
    10 VERSION=`cat VERSION`
     10VERSION=`agvtool mvers -terse1`
    1111BUILD=`agvtool vers -terse`
    1212DMG="$PRODUCT-$VERSION.dmg" VOL="$PRODUCT $VERSION"
     
    4646DIGEST=`openssl dgst -sha1 -binary < $DMG | openssl dgst -dss1 -sign ~/Documents/Development/DSA/dsa_priv.pem | openssl enc -base64`
    4747perl -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
     48scp $DMG ainaz:web/nriley/software/$DMG.new
     49ssh ainaz chmod go+r web/nriley/software/$DMG.new
     50ssh ainaz mv web/nriley/software/$DMG{.new,}
    5051rsync -avz --exclude='.*' Updates/ ainaz:web/nriley/software/$PRODUCT/
    51 cd "$PACKAGEDIR"/Source
     52# cd "$PACKAGEDIR"/Source
    5253# agvtool bump -all
    5354
Note: See TracChangeset for help on using the changeset viewer.