#import "Options.h" #import "DiagnosticsPanel.h" #import "Controller.h" @implementation Option NSArray *optClasses = nil; + optEnumerator { if(optClasses==nil){ optClasses = [NSArray arrayWithObjects:[OrientationOpt class], [BorderOpt class], [TOCOpt class], [DeviceOpt class], [DuplexOpt class], [PredefVirtOpt class], [MediaOpt class], [StyleSheetOpt class], [EncodingOpt class], [PrologueOpt class], [VirtualsOpt class], [TitleOpt class], [FooterOpt class], [FontSizeOpt class], [PagesOpt class], [MarginOpt class], [JobTitleOpt class], [CharsPerLineOpt class], [LinesPerPageOpt class], [HeaderOpt class], nil]; [optClasses retain]; } return [optClasses objectEnumerator]; } - initWithController:(id)theCon; { con = theCon; enabled = NO; control = nil; errMsg = nil; return self; } - setOptEnabled:(BOOL)eflag { if(eflag==enabled){ return self; } enabled = eflag; [control setEnabled:enabled]; [control setNeedsDisplay:YES]; return self; } - (BOOL)optEnabled { return enabled; } - (BOOL)usedByA2PS { return YES; } - (BOOL)usedByGS { return NO; } - (NSArray *)optionsForA2PS { [self subclassResponsibility:_cmd]; return nil; } - (NSArray *)optionsForGS { [self subclassResponsibility:_cmd]; return nil; } - control { return control; } - (NSString *)title { [self subclassResponsibility:_cmd]; return nil; } - (NSString *)errMsg { return errMsg; } - cleanupOption { [control release]; return self; } - (NSMutableDictionary *)dataDict:(NSDictionary *)src { if(src==nil){ return [NSMutableDictionary dictionary]; } return [NSMutableDictionary dictionaryWithDictionary:src]; } #define ENKEY @"Enabled" - (NSUserDefaults *)writeUserDefaults { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSMutableDictionary *ent = [self dataDict:[defaults dictionaryForKey:[self title]]]; [ent setObject:(enabled==YES ? @"Yes" : @"No") forKey:ENKEY]; [defaults setObject:ent forKey:[self title]]; return defaults; } - (NSUserDefaults *)readUserDefaults { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSDictionary *ent = [defaults dictionaryForKey:[self title]]; if(ent!=nil){ NSString *enstr = [ent objectForKey:ENKEY]; if(enstr!=nil && [enstr isEqualToString:@"Yes"]==YES){ [self setOptEnabled:YES]; } else{ [self setOptEnabled:NO]; } } return defaults; } @end @implementation RadioOpt - initWithController:(id)theCon { NSRect cframe = {{0, 0}, {50, 50}}; id cell; NSButtonCell *proto; NSArray *titles = [self titles]; NSEnumerator *titleEnum; NSString *title; int row; [super initWithController:theCon]; proto = [[NSButtonCell alloc] initImageCell:nil]; [proto setButtonType:NSRadioButton]; [proto setBordered:NO]; [proto setFont:[NSFont labelFontOfSize: [[proto font] pointSize]+2]]; control = [[NSMatrix alloc] initWithFrame:cframe mode:NSRadioModeMatrix prototype:proto numberOfRows:[titles count] numberOfColumns:1]; [control setIntercellSpacing:NSMakeSize(4, 4)]; titleEnum = [titles objectEnumerator]; row = 0; while((title=[titleEnum nextObject])!=nil){ cell = [control cellAtRow:row column:0]; [cell setTitle:title]; [cell setTag:row++]; [cell setEnabled:NO]; } [control sizeToFit]; [control setAutoresizingMask:NSViewNotSizable]; [control retain]; return self; } - (NSArray *)titles { [self subclassResponsibility:_cmd]; return nil; } - setOptEnabled:(BOOL)eflag { int row, max = [control numberOfRows]; if(eflag==enabled){ return self; } enabled = eflag; for(row=0; row