X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?p=xscreensaver;a=blobdiff_plain;f=OSX%2FXScreenSaverConfigSheet.m;fp=OSX%2FXScreenSaverConfigSheet.m;h=46b73dee9a1a6e56ccfcab3321d43018e0a71476;hp=7220d2c214485bcad29d649166aceca9973b34d2;hb=019de959b265701cd0c3fccbb61f2b69f06bf9ee;hpb=2762a7d7cf8d83e68b8f635941f6609119d630ae diff --git a/OSX/XScreenSaverConfigSheet.m b/OSX/XScreenSaverConfigSheet.m index 7220d2c2..46b73dee 100644 --- a/OSX/XScreenSaverConfigSheet.m +++ b/OSX/XScreenSaverConfigSheet.m @@ -24,6 +24,7 @@ */ #import "XScreenSaverConfigSheet.h" +#import "Updater.h" #import "jwxyz.h" #import "InvertedSlider.h" @@ -447,7 +448,7 @@ static void layout_group (NSView *group, BOOL horiz_p); instead, so transform keys to "SAVERNAME.KEY". NOTE: This is duplicated in PrefsReader.m, cause I suck. -*/ + */ - (NSString *) makeKey:(NSString *)key { # ifdef USE_IPHONE @@ -524,6 +525,22 @@ static void layout_group (NSView *group, BOOL horiz_p); } +- (NSUserDefaultsController *)controllerForKey:(NSString *)key +{ + static NSDictionary *a = 0; + if (! a) { + a = UPDATER_DEFAULTS; + [a retain]; + } + if ([a objectForKey:key]) + // These preferences are global to all xscreensavers. + return globalDefaultsController; + else + // All other preferences are per-saver. + return userDefaultsController; +} + + #ifdef USE_IPHONE // Called when a slider is bonked. @@ -539,10 +556,11 @@ static void layout_group (NSView *group, BOOL horiz_p); ? [(InvertedSlider *) sender transformedValue] : [sender value]); - if (v == (int) v) - [userDefaultsController setInteger:v forKey:pref_key]; - else - [userDefaultsController setDouble:v forKey:pref_key]; + [[self controllerForKey:pref_key] + setObject:((v == (int) v) + ? [NSNumber numberWithInt:(int) v] + : [NSNumber numberWithDouble: v]) + forKey:pref_key]; } // Called when a checkbox/switch is bonked. @@ -553,7 +571,7 @@ static void layout_group (NSView *group, BOOL horiz_p); [active_text_field resignFirstResponder]; NSString *pref_key = [pref_keys objectAtIndex: [sender tag]]; NSString *v = ([sender isOn] ? @"true" : @"false"); - [userDefaultsController setObject:v forKey:pref_key]; + [[self controllerForKey:pref_key] setObject:v forKey:pref_key]; } # ifdef USE_PICKER_VIEW @@ -575,7 +593,7 @@ static void layout_group (NSView *group, BOOL horiz_p); //NSString *label = [a objectAtIndex:0]; NSString *pref_key = [a objectAtIndex:1]; NSObject *pref_val = [a objectAtIndex:2]; - [userDefaultsController setObject:pref_val forKey:pref_key]; + [[self controllerForKey:pref_key] setObject:pref_val forKey:pref_key]; } # else // !USE_PICKER_VIEW @@ -589,7 +607,7 @@ static void layout_group (NSView *group, BOOL horiz_p); NSArray *item = [[sender items] objectAtIndex: [sender index]]; NSString *pref_key = [item objectAtIndex:1]; NSObject *pref_val = [item objectAtIndex:2]; - [userDefaultsController setObject:pref_val forKey:pref_key]; + [[self controllerForKey:pref_key] setObject:pref_val forKey:pref_key]; } - (BOOL)textFieldShouldBeginEditing:(UITextField *)tf @@ -602,7 +620,7 @@ static void layout_group (NSView *group, BOOL horiz_p); { NSString *pref_key = [pref_keys objectAtIndex: [tf tag]]; NSString *txt = [tf text]; - [userDefaultsController setObject:txt forKey:pref_key]; + [[self controllerForKey:pref_key] setObject:txt forKey:pref_key]; } - (BOOL)textFieldShouldReturn:(UITextField *)tf @@ -621,15 +639,18 @@ static void layout_group (NSView *group, BOOL horiz_p); - (void) okAction:(NSObject *)arg { - [userDefaultsController commitEditing]; - [userDefaultsController save:self]; + [userDefaultsController commitEditing]; + [globalDefaultsController commitEditing]; + [userDefaultsController save:self]; + [globalDefaultsController save:self]; [NSApp endSheet:self returnCode:NSOKButton]; [self close]; } - (void) cancelAction:(NSObject *)arg { - [userDefaultsController revert:self]; + [userDefaultsController revert:self]; + [globalDefaultsController revert:self]; [NSApp endSheet:self returnCode:NSCancelButton]; [self close]; } @@ -639,12 +660,13 @@ static void layout_group (NSView *group, BOOL horiz_p); - (void) resetAction:(NSObject *)arg { # ifndef USE_IPHONE - [userDefaultsController revertToInitialValues:self]; + [userDefaultsController revertToInitialValues:self]; + [globalDefaultsController revertToInitialValues:self]; # else // USE_IPHONE for (NSString *key in defaultOptions) { NSObject *val = [defaultOptions objectForKey:key]; - [userDefaultsController setObject:val forKey:key]; + [[self controllerForKey:key] setObject:val forKey:key]; } for (UIControl *ctl in pref_ctls) { @@ -662,6 +684,7 @@ static void layout_group (NSView *group, BOOL horiz_p); - (void) bindResource:(NSObject *)control key:(NSString *)pref_key reload:(BOOL)reload_p { + NSUserDefaultsController *prefs = [self controllerForKey:pref_key]; # ifndef USE_IPHONE NSString *bindto = ([control isKindOfClass:[NSPopUpButton class]] ? @"selectedObject" @@ -669,12 +692,12 @@ static void layout_group (NSView *group, BOOL horiz_p); ? @"selectedIndex" : @"value")); [control bind:bindto - toObject:userDefaultsController + toObject:prefs withKeyPath:[@"values." stringByAppendingString: pref_key] options:nil]; # else // USE_IPHONE SEL sel; - NSObject *val = [userDefaultsController objectForKey:pref_key]; + NSObject *val = [prefs objectForKey:pref_key]; NSString *sval = 0; double dval = 0; @@ -739,7 +762,7 @@ static void layout_group (NSView *group, BOOL horiz_p); # endif // USE_IPHONE # if 0 - NSObject *def = [[userDefaultsController defaults] objectForKey:pref_key]; + NSObject *def = [[prefs defaults] objectForKey:pref_key]; NSString *s = [NSString stringWithFormat:@"bind: \"%@\"", pref_key]; s = [s stringByPaddingToLength:18 withString:@" " startingAtIndex:0]; s = [NSString stringWithFormat:@"%@ = \"%@\"", s, def]; @@ -1071,12 +1094,10 @@ hreffify (NSText *nstext) */ - (NSString *) parseXScreenSaverTag:(NSXMLNode *)node { - NSMutableDictionary *dict = - [NSMutableDictionary dictionaryWithObjectsAndKeys: - @"", @"name", - @"", @"_label", - @"", @"gl", - nil]; + NSMutableDictionary *dict = [@{ @"name": @"", + @"_label": @"", + @"gl": @"" } + mutableCopy]; [self parseAttrs:dict node:node]; NSString *name = [dict objectForKey:@"name"]; NSString *label = [dict objectForKey:@"_label"]; @@ -1121,13 +1142,11 @@ hreffify (NSText *nstext) */ - (void) makeCheckbox:(NSXMLNode *)node on:(NSView *)parent { - NSMutableDictionary *dict = - [NSMutableDictionary dictionaryWithObjectsAndKeys: - @"", @"id", - @"", @"_label", - @"", @"arg-set", - @"", @"arg-unset", - nil]; + NSMutableDictionary *dict = [@{ @"id": @"", + @"_label": @"", + @"arg-set": @"", + @"arg-unset": @"" } + mutableCopy]; [self parseAttrs:dict node:node]; NSString *label = [dict objectForKey:@"_label"]; NSString *arg_set = [dict objectForKey:@"arg-set"]; @@ -1187,22 +1206,20 @@ hreffify (NSText *nstext) /* Creates the number selection control described by the given XML node. If "type=slider", it's an NSSlider. If "type=spinbutton", it's a text field with up/down arrows next to it. -*/ + */ - (void) makeNumberSelector:(NSXMLNode *)node on:(NSView *)parent { - NSMutableDictionary *dict = - [NSMutableDictionary dictionaryWithObjectsAndKeys: - @"", @"id", - @"", @"_label", - @"", @"_low-label", - @"", @"_high-label", - @"", @"type", - @"", @"arg", - @"", @"low", - @"", @"high", - @"", @"default", - @"", @"convert", - nil]; + NSMutableDictionary *dict = [@{ @"id": @"", + @"_label": @"", + @"_low-label": @"", + @"_high-label": @"", + @"type": @"", + @"arg": @"", + @"low": @"", + @"high": @"", + @"default": @"", + @"convert": @"" } + mutableCopy]; [self parseAttrs:dict node:node]; NSString *label = [dict objectForKey:@"_label"]; NSString *low_label = [dict objectForKey:@"_low-label"]; @@ -1474,7 +1491,7 @@ set_menu_item_object (NSMenuItem *item, NSObject *obj) /* Creates the popup menu described by the given XML node (and its children). -*/ + */ - (void) makeOptionMenu:(NSXMLNode *)node on:(NSView *)parent { NSArray *children = [node children]; @@ -1487,10 +1504,7 @@ set_menu_item_object (NSMenuItem *item, NSObject *obj) // get the "id" attribute off the node2 = [[NSXMLElement alloc] initWithName:@"select"]; - [node2 setAttributesAsDictionary: - [NSDictionary dictionaryWithObjectsAndKeys: - @"textMode", @"id", - nil]]; + [node2 setAttributesAsDictionary:@{ @"id": @"textMode" }]; NSXMLNode *node3 = [[NSXMLElement alloc] initWithName:@"option"]; [node3 setAttributesAsDictionary: - [NSDictionary dictionaryWithObjectsAndKeys: - @"date", @"id", - @"-text-mode date", @"arg-set", - @"Display the date and time", @"_label", - nil]]; + @{ @"id": @"date", + @"arg-set": @"-text-mode date", + @"_label": @"Display the date and time" }]; [node3 setParent: node2]; //[node3 release]; node3 = [[NSXMLElement alloc] initWithName:@"option"]; [node3 setAttributesAsDictionary: - [NSDictionary dictionaryWithObjectsAndKeys: - @"text", @"id", - @"-text-mode literal", @"arg-set", - @"Display static text", @"_label", - nil]]; + @{ @"id": @"text", + @"arg-set": @"-text-mode literal", + @"_label": @"Display static text" }]; [node3 setParent: node2]; //[node3 release]; node3 = [[NSXMLElement alloc] initWithName:@"option"]; [node3 setAttributesAsDictionary: - [NSDictionary dictionaryWithObjectsAndKeys: - @"url", @"id", - @"Display the contents of a URL", @"_label", - nil]]; + @{ @"id": @"url", + @"_label": @"Display the contents of a URL" }]; [node3 setParent: node2]; //[node3 release]; @@ -2143,13 +2142,12 @@ find_text_field_of_button (NSButton *button) // node2 = [[NSXMLElement alloc] initWithName:@"string"]; [node2 setAttributesAsDictionary: - [NSDictionary dictionaryWithObjectsAndKeys: - @"textLiteral", @"id", - @"-text-literal %", @"arg", + @{ @"id": @"textLiteral", + @"arg": @"-text-literal %", # ifdef USE_IPHONE - @"Text to display", @"_label", + @"_label": @"Text to display" # endif - nil]]; + }]; [self makeTextField:node2 on:rgroup # ifndef USE_IPHONE withLabel:NO @@ -2166,17 +2164,15 @@ find_text_field_of_button (NSButton *button) toObject:[matrix cellAtRow:1 column:0] withKeyPath:@"value" options:nil]; -*/ + */ # ifndef USE_IPHONE // node2 = [[NSXMLElement alloc] initWithName:@"string"]; [node2 setAttributesAsDictionary: - [NSDictionary dictionaryWithObjectsAndKeys: - @"textFile", @"id", - @"-text-file %", @"arg", - nil]]; + @{ @"id": @"textFile", + @"arg": @"-text-file %" }]; [self makeFileSelector:node2 on:rgroup dirsOnly:NO withLabel:NO editable:NO]; # endif // !USE_IPHONE @@ -2186,13 +2182,12 @@ find_text_field_of_button (NSButton *button) // node2 = [[NSXMLElement alloc] initWithName:@"string"]; [node2 setAttributesAsDictionary: - [NSDictionary dictionaryWithObjectsAndKeys: - @"textURL", @"id", - @"-text-url %", @"arg", + @{ @"id": @"textURL", + @"arg": @"-text-url %", # ifdef USE_IPHONE - @"URL to display", @"_label", + @"_label": @"URL to display", # endif - nil]]; + }]; [self makeTextField:node2 on:rgroup # ifndef USE_IPHONE withLabel:NO @@ -2208,10 +2203,9 @@ find_text_field_of_button (NSButton *button) // node2 = [[NSXMLElement alloc] initWithName:@"string"]; [node2 setAttributesAsDictionary: - [NSDictionary dictionaryWithObjectsAndKeys: - @"textProgram", @"id", - @"-text-program %", @"arg", - nil]]; + @{ @"id": @"textProgram", + @"arg": @"-text-program %", + }]; [self makeTextField:node2 on:rgroup withLabel:NO horizontal:NO]; } @@ -2299,29 +2293,26 @@ find_text_field_of_button (NSButton *button) node2 = [[NSXMLElement alloc] initWithName:@"boolean"]; [node2 setAttributesAsDictionary: - [NSDictionary dictionaryWithObjectsAndKeys: - @"grabDesktopImages", @"id", - @ SCREENS, @"_label", - @"-no-grab-desktop", @"arg-unset", - nil]]; + @{ @"id": @"grabDesktopImages", + @"_label": @ SCREENS, + @"arg-unset": @"-no-grab-desktop", + }]; [self makeCheckbox:node2 on:parent]; node2 = [[NSXMLElement alloc] initWithName:@"boolean"]; [node2 setAttributesAsDictionary: - [NSDictionary dictionaryWithObjectsAndKeys: - @"chooseRandomImages", @"id", - @ PHOTOS, @"_label", - @"-choose-random-images", @"arg-set", - nil]]; + @{ @"id": @"chooseRandomImages", + @"_label": @ PHOTOS, + @"arg-set": @"-choose-random-images", + }]; [self makeCheckbox:node2 on:parent]; node2 = [[NSXMLElement alloc] initWithName:@"string"]; [node2 setAttributesAsDictionary: - [NSDictionary dictionaryWithObjectsAndKeys: - @"imageDirectory", @"id", - @"Images from:", @"_label", - @"-image-directory %", @"arg", - nil]]; + @{ @"id": @"imageDirectory", + @"_label": @"Images from:", + @"arg": @"-image-directory %", + }]; [self makeFileSelector:node2 on:parent dirsOnly:YES withLabel:YES editable:YES]; @@ -2345,6 +2336,106 @@ find_text_field_of_button (NSButton *button) } +- (void) makeUpdaterControlBox:(NSXMLNode *)node on:(NSView *)parent +{ +# ifndef USE_IPHONE + /* + [x] Check for Updates [ Monthly ] + +
+ + +
+ */ + + //
+ + NSRect rect; + rect.size.width = rect.size.height = 1; + rect.origin.x = rect.origin.y = 0; + NSView *group = [[NSView alloc] initWithFrame:rect]; + + NSXMLElement *node2; + + // + + node2 = [[NSXMLElement alloc] initWithName:@"boolean"]; + [node2 setAttributesAsDictionary: + @{ @"id": @SUSUEnableAutomaticChecksKey, + @"_label": @"Automatically check for updates", + @"arg-unset": @"-no-" SUSUEnableAutomaticChecksKey, + }]; + [self makeCheckbox:node2 on:group]; + + //