Ignore:
Timestamp:
08/09/07 05:48:07 (17 years ago)
Author:
Nicholas Riley
Message:

version.plist: Not needed.

Info.plist: Updated for 1.4njr2.

AUTHORS: Updated Onne Gorter's email address and added mine.

AntiRSI.[hm]: Added dock badge session timer display and auto-reset options. Updated URLs to point to my Web site; should probably just switch to Sparkle.

CTBadge: Added customized version.

English.lproj/InfoPlist.strings: Updated for 1.4njr2; credit myself and Chad; remove Onne Gorter's URL.

English.lproj/MainMenu.nib: Preference changes; add cmd-R for manual reset.

Location:
trunk/Cocoa/AntiRSI
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Cocoa/AntiRSI

    • Property svn:ignore set to
      build
  • trunk/Cocoa/AntiRSI/AntiRSI.m

    r331 r332  
    102102        [elapsed autorelease];
    103103        elapsed=[c retain];
     104    [dock_badge setBadgeColor:elapsed];
    104105        [self drawDockImage];
    105106}
     
    152153        original_dock_image = [NSImage imageNamed:@"AntiRSI"];
    153154        draw_dock_image_q = YES;
     155    dock_badge = [[CTBadge systemBadge] retain];
     156    [dock_badge setBadgeColor:elapsed];
    154157       
    155158        // setup main window that will show either micropause or workbreak
     
    165168        [main_window center];
    166169        [main_window setContentView:view];
     170    NSTimeZone *utcZone = [NSTimeZone timeZoneForSecondsFromGMT:0];
     171    [reset_session_time setTimeZone:utcZone];
    167172    [progress setEnabled:NO];
    168173    NSFont *myriad = [NSFont fontWithName: @"Myriad" size: 40];
     
    181186       
    182187        // create initial values
    183         NSMutableDictionary* initial = [NSMutableDictionary dictionaryWithCapacity:10];
    184         [initial setObject:[NSNumber numberWithFloat:4] forKey:@"micro_pause_period"];
    185         [initial setObject:[NSNumber numberWithFloat:13] forKey:@"micro_pause_duration"];
    186         [initial setObject:[NSNumber numberWithFloat:50] forKey:@"work_break_period"];
    187         [initial setObject:[NSNumber numberWithFloat:8] forKey:@"work_break_duration"];
    188         [initial setObject:@"Smooth" forKey:@"sample_interval"];
    189         [initial setObject:[NSNumber numberWithBool:YES] forKey:@"draw_dock_image"];
    190         [initial setObject:[NSNumber numberWithBool:NO] forKey:@"lock_focus"];
    191         [initial setObject:[NSArchiver archivedDataWithRootObject:elapsed] forKey:@"elapsed"];
    192         [initial setObject:[NSArchiver archivedDataWithRootObject:taking] forKey:@"taking"];
    193         [initial setObject:[NSArchiver archivedDataWithRootObject:background] forKey:@"background"];
    194         [[NSUserDefaultsController sharedUserDefaultsController] setInitialValues:initial];
     188        NSUserDefaultsController *dc = [NSUserDefaultsController sharedUserDefaultsController];
     189        NSMutableDictionary* initial = [NSMutableDictionary dictionaryWithObjectsAndKeys:
     190        [NSNumber numberWithFloat:4], @"micro_pause_period",
     191        [NSNumber numberWithFloat:13], @"micro_pause_duration",
     192        [NSNumber numberWithFloat:50], @"work_break_period",
     193        [NSNumber numberWithFloat:8], @"work_break_duration",
     194        @"Smooth", @"sample_interval",
     195        [NSNumber numberWithBool:YES], @"draw_dock_image",
     196        [NSNumber numberWithBool:YES], @"draw_dock_badge",
     197        [NSNumber numberWithBool:NO], @"lock_focus",
     198        [NSNumber numberWithBool:NO], @"reset_session_timer_daily",
     199        [NSNumber numberWithBool:NO], @"reset_session_timer_after",
     200        [NSCalendarDate dateWithYear:2000 month:1 day:1 hour:6 minute:0 second:0 timeZone:utcZone], @"reset_session_timer_time",
     201        [NSNumber numberWithInt:8], @"reset_session_timer_after_hours",
     202        [NSArchiver archivedDataWithRootObject:elapsed], @"elapsed",
     203        [NSArchiver archivedDataWithRootObject:taking], @"taking",
     204        [NSArchiver archivedDataWithRootObject:background], @"background",
     205        nil];
     206    [[NSUserDefaults standardUserDefaults] registerDefaults:initial];
     207        [dc setInitialValues:initial];
    195208
    196209        // bind to defauls controller
    197         id dc = [NSUserDefaultsController sharedUserDefaultsController];
    198210        [self bind:@"micro_pause_period" toObject:dc withKeyPath:@"values.micro_pause_period" options:nil];
    199211        [self bind:@"micro_pause_duration" toObject:dc withKeyPath:@"values.micro_pause_duration" options:nil];
     
    202214        [self bind:@"sample_interval" toObject:dc withKeyPath:@"values.sample_interval" options:nil];
    203215        [self bind:@"draw_dock_image" toObject:dc withKeyPath:@"values.draw_dock_image" options:nil];
     216    [self bind:@"draw_dock_badge" toObject:dc withKeyPath:@"values.draw_dock_badge" options:nil];
    204217        [self bind:@"lock_focus" toObject:dc withKeyPath:@"values.lock_focus" options:nil];
     218    [self bind:@"reset_session_timer_daily" toObject:dc withKeyPath:@"values.reset_session_timer_daily" options:nil];
     219    [self bind:@"reset_session_timer_after" toObject:dc withKeyPath:@"values.reset_session_timer_after" options:nil];
     220    [self bind:@"reset_session_timer_time" toObject:dc withKeyPath:@"values.reset_session_timer_time" options:nil];
     221    [self bind:@"reset_session_timer_after_hours" toObject:dc withKeyPath:@"values.reset_session_timer_after_hours" options:nil];
    205222        NSDictionary* unarchive = [NSDictionary dictionaryWithObject:NSUnarchiveFromDataTransformerName forKey:@"NSValueTransformerName"];
    206223        [self bind:@"elapsed" toObject:dc withKeyPath:@"values.elapsed" options:unarchive];
    207224        [self bind:@"taking" toObject:dc withKeyPath:@"values.taking" options:unarchive];
    208225        [self bind:@"background" toObject:dc withKeyPath:@"values.background" options:unarchive];
    209 
     226   
     227    // watch for timer changes
     228    [dc addObserver:self forKeyPath:@"values.reset_session_timer_time" options:0 context:NULL];
     229   
    210230        // alert every binding
    211         [[NSUserDefaultsController sharedUserDefaultsController] revert:self];
     231        [dc revert:self];
    212232
    213233        // start the timer
     
    218238}
    219239
     240- (void)computeResetSessionDate;
     241{
     242    NSTimeZone *systemZone = [NSTimeZone systemTimeZone];
     243    NSCalendarDate *today = [NSCalendarDate calendarDate];
     244    NSCalendarDate *reset = [NSCalendarDate dateWithTimeIntervalSinceReferenceDate:[reset_session_timer_time timeIntervalSinceReferenceDate]];
     245    [reset setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
     246    reset = [NSCalendarDate dateWithYear:[today yearOfCommonEra]
     247                                   month:[today monthOfYear]
     248                                     day:[today dayOfMonth]
     249                                    hour:[reset hourOfDay]
     250                                  minute:[reset minuteOfHour]
     251                                  second:0
     252                                timeZone:systemZone];
     253    if ([today compare:reset] != NSOrderedAscending)
     254        reset = [reset dateByAddingYears:0 months:0 days:1 hours:0 minutes:0 seconds:0];
     255    reset_session_date = [reset timeIntervalSinceReferenceDate];
     256}
     257
     258- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context;
     259{
     260    if ([keyPath isEqualToString:@"values.reset_session_timer_time"])
     261        [self computeResetSessionDate];
     262}
     263
    220264// tick every second and update status
    221265- (void)tick:(NSTimer *)timer
    222266{
    223267        // calculate time since last tick
    224         double new_date = [NSDate timeIntervalSinceReferenceDate];
    225         double tick_time = new_date - date;
     268        NSTimeInterval new_date = [NSDate timeIntervalSinceReferenceDate];
     269        NSTimeInterval tick_time = new_date - date;
    226270        date = new_date;
    227        
     271
     272    if (reset_session_timer_daily && date >= reset_session_date) {
     273        [self resetSession:nil];
     274        [self computeResetSessionDate];
     275        return;
     276    }
     277   
    228278        // check if we are still on track of normal time, otherwise we might have slept or something
    229279        if (tick_time > work_break_duration) {
     
    268318    }
    269319    // NSLog(@"CGEventSource %.2f, CGS %.2f", idle_time, cgs_idle_time);
     320   
     321    if (reset_session_timer_after && idle_time > reset_session_timer_after_hours * 3600) {
     322        [self resetSession:nil];
     323        return;
     324    }
    270325   
    271326        // calculate slack, this gives a sort of 3 history filtered idea.
     
    476531        [p stroke];
    477532       
     533    // draw session time
     534    if (draw_dock_badge) {
     535        static NSImage *badge = nil;
     536        static int badge_session_minutes = -1;
     537        int session_minutes = (int)session_t / 60;
     538        if (badge_session_minutes != session_minutes) {
     539            if (badge != nil) [badge release];
     540            badge = [[dock_badge badgeOverlayImageForString: [NSString stringWithFormat:@"%d:%02d", session_minutes / 60, session_minutes % 60] insetX: 3 y: 3] retain];
     541            badge_session_minutes = session_minutes;
     542        }
     543        [badge compositeToPoint:NSZeroPoint operation:NSCompositeSourceOver];
     544    }
     545   
    478546        [dock_image unlockFocus];
    479547
Note: See TracChangeset for help on using the changeset viewer.