Subversion Repositories TruePreview

[/] [trunk/] [Source/] [TruePreviewPreferencesModule.m] - Rev 17

Go to most recent revision | Compare with Previous | Blame | Download | View Log

/*
 * Copyright (c) 2009, Jim Riggs, Christian Serving, L.L.C.
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are
 * met:
 *     * Redistributions of source code must retain the above copyright
 *       notice, this list of conditions and the following disclaimer.
 *     * Redistributions in binary form must reproduce the above
 *       copyright notice, this list of conditions and the following
 *       disclaimer in the documentation and/or other materials provided
 *       with the distribution.
 *     * Neither the name of Christian Serving, L.L.C. nor the names of
 *       its contributors may be used to endorse or promote products
 *       derived from this software without specific prior written
 *       permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

#import "TruePreviewPreferencesModule.h"

@implementation TruePreviewPreferencesModule

#pragma mark NSPreferencesModule instance methods

- (NSString*)preferencesNibName {
  return @"TruePreviewPreferencesPanel";
}

- (void)willBeDisplayed {
  [super willBeDisplayed];

  // build the list of accounts
  NSDictionary* theAccountDict = [[NSUserDefaults standardUserDefaults] objectForKey:@"TruePreviewAccountSettings"];
  NSMutableArray* theAccounts = [NSMutableArray array];
  NSEnumerator* theEnum = [[[NSClassFromString(@"MailAccount") remoteAccounts] valueForKey:@"displayName"] objectEnumerator];
  NSString* theDisplayName = nil;

  while (theDisplayName = [theEnum nextObject]) {
    NSMutableDictionary* theAccount = [NSMutableDictionary dictionaryWithObjectsAndKeys:
      theDisplayName, @"displayName",
      [NSNumber numberWithInt:TRUEPREVIEW_DELAY_DEFAULT], @"delay",
      [NSNumber numberWithInt:TRUEPREVIEW_DELAY_DEFAULT], @"window",
      [NSNumber numberWithInt:TRUEPREVIEW_DELAY_DEFAULT], @"scroll",
      nil
    ];
   
    [theAccount addEntriesFromDictionary:[theAccountDict objectForKey:theDisplayName]];
    [theAccounts addObject:theAccount];
  }

  // watch the array for changes to save the user defaults
  [theAccounts
    addObserver:self
    toObjectsAtIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, [theAccounts count])]
    forKeyPath:@"delay"
    options:0
    context:theAccounts
  ];
  [theAccounts
    addObserver:self
    toObjectsAtIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, [theAccounts count])]
    forKeyPath:@"window"
    options:0
    context:theAccounts
  ];
  [theAccounts
    addObserver:self
    toObjectsAtIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, [theAccounts count])]
    forKeyPath:@"scroll"
    options:0
    context:theAccounts
  ];

  [fldAccountArrayController setContent:theAccounts];
}

#pragma mark NSKeyValueObserving instance methods

- (void)observeValueForKeyPath:(NSString*)inPath
    ofObject:(id)inObject
    change:(NSDictionary*)inChange
    context:(void*)inContext {
  NSMutableDictionary* theAccountDict = [NSMutableDictionary dictionary];
  NSEnumerator* theAccountEnum = [(NSArray*)inContext objectEnumerator];
  NSDictionary* theAccount = nil;
 
  // build the account settings dictionary to save in the user defaults
  while (theAccount = [theAccountEnum nextObject]) {
    [theAccountDict setObject:theAccount forKey:[theAccount objectForKey:@"displayName"]];
  }
 
  [[NSUserDefaults standardUserDefaults] setObject:theAccountDict forKey:@"TruePreviewAccountSettings"];
  [[NSUserDefaults standardUserDefaults] synchronize];
}

@end
 

Go to most recent revision | Compare with Previous | Blame | Download | View Log