commenting out unused interval variable. May be useful later.
[cpuHistory.git] / Preferences.m
blob000ea2c98864435e2dc328046ad5e5aa8932bd99
1 /*
2  *      CPU History
3  *      Christopher Bowns, 2008
4  *      
5  *      Formerly: Memory Monitor, by Bernhard Baehr
6  *
7  *      Copyright © 2001-2003 Bernhard Baehr
8  *
9  *      Preferences.m - Preferences Controller Class
10  *
11  *      This program is free software; you can redistribute it and/or modify
12  *      it under the terms of the GNU General Public License as published by
13  *      the Free Software Foundation; either version 2 of the License, or
14  *      (at your option) any later version.
15  *
16  *      This program is distributed in the hope that it will be useful,
17  *      but WITHOUT ANY WARRANTY; without even the implied warranty of
18  *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19  *      GNU General Public License for more details.
20  *
21  *      You should have received a copy of the GNU General Public License
22  *      along with this program; if not, write to the Free Software
23  *      Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
24  */
27 #import "Preferences.h"
30 @implementation Preferences
33 + (NSMutableDictionary *)defaultPreferences
35         return ([[NSMutableDictionary alloc] initWithObjectsAndKeys:
36                 [[NSColor yellowColor] colorWithAlphaComponent:0.8], WIRED_COLOR_KEY,
37                 [[NSColor magentaColor] colorWithAlphaComponent:0.8], ACTIVE_COLOR_KEY,
38                 [[NSColor cyanColor] colorWithAlphaComponent:0.8], INACTIVE_COLOR_KEY,
39                 [[NSColor blueColor] colorWithAlphaComponent:0.8], FREE_COLOR_KEY,
40                 
41                 [NSColor whiteColor], PAGEIN_COLOR_KEY,
42                 [NSColor blackColor], PAGEOUT_COLOR_KEY,
43                 [NSNumber numberWithInt:250], PAGING_SCALE_MAX_KEY,
44                 [NSNumber numberWithBool:YES], PAGEIN_ATOP_PAGEOUT_KEY,
45                 [NSNumber numberWithBool:YES], SHOW_PAGING_RATE_KEY,
46                 
47                 [[NSColor yellowColor] colorWithAlphaComponent:0.8], USER_COLOR_KEY,
48                 [[NSColor magentaColor] colorWithAlphaComponent:0.8], SYS_COLOR_KEY,
49                 [[NSColor cyanColor] colorWithAlphaComponent:0.8], NICE_COLOR_KEY,
50                 [[NSColor blueColor] colorWithAlphaComponent:0.8], IDLE_COLOR_KEY,
51                 
52                 
53                 [NSNumber numberWithInt:10], UPDATE_FREQUENCY_KEY,      /* unit is 1/10 second */
54                 [NSNumber numberWithBool:NO], SHOW_GRAPH_WINDOW_KEY,
55                 [NSNumber numberWithBool:NO], GRAPH_WINDOW_ON_TOP_KEY,
56                 [NSNumber numberWithInt:128], GRAPH_WINDOW_SIZE_KEY,
57                 [NSNumber numberWithFloat:1.0], DOCK_ICON_SIZE_KEY,
58                 nil]);
62 - (id)init
64 #define SCANCOLOR(key)  \
65         if ((obj = [defaults objectForKey:key])) { \
66                 a = transparency; \
67                 sscanf ([obj cString], "%f %f %f %f", &r, &g, &b, &a); \
68                 obj = [NSColor colorWithCalibratedRed:r green:g blue:b alpha:a]; \
69                 [currentSettings setObject:obj forKey:key]; \
70         }
71 #define GETNUMBER(key)  \
72         if ((obj = [defaults objectForKey:key])) \
73                 [currentSettings setObject:obj forKey:key];
75         id      obj;
76         float   r, g, b, a, transparency;
78         NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
79         
80         self = [super init];
81         currentSettings = [Preferences defaultPreferences];
82         SCANCOLOR (WIRED_COLOR_KEY);
83         SCANCOLOR (ACTIVE_COLOR_KEY);
84         SCANCOLOR (INACTIVE_COLOR_KEY);
85         SCANCOLOR (FREE_COLOR_KEY);
86         SCANCOLOR (PAGEIN_COLOR_KEY);
87         SCANCOLOR (PAGEOUT_COLOR_KEY);
88         GETNUMBER (PAGING_SCALE_MAX_KEY);
89         GETNUMBER (PAGEIN_ATOP_PAGEOUT_KEY);
90         GETNUMBER (SHOW_PAGING_RATE_KEY);
92         GETNUMBER (OLD_TRANSPARENCY_KEY);
93         transparency = obj ? [obj floatValue] : 0.8;    /* global transparency setting of version 1.1 */
94         SCANCOLOR (USER_COLOR_KEY);
95         SCANCOLOR (SYS_COLOR_KEY);
96         SCANCOLOR (NICE_COLOR_KEY);
97         SCANCOLOR (IDLE_COLOR_KEY);
98         transparency = 1.0;                     /* paging was drawn without transparency in version 1.1 */
99         GETNUMBER (UPDATE_FREQUENCY_KEY);
100         GETNUMBER (SHOW_GRAPH_WINDOW_KEY);
101         GETNUMBER (GRAPH_WINDOW_ON_TOP_KEY);
102         GETNUMBER (GRAPH_WINDOW_SIZE_KEY);
103         GETNUMBER (DOCK_ICON_SIZE_KEY);
104         [[NSColorPanel sharedColorPanel] setShowsAlpha:YES];
105         return (self);
109 - (void)showUpdateFrequency:(int)freq
111         [updateFrequency setStringValue:[NSString
112                 localizedStringWithFormat:NSLocalizedString(@"every\n%.1f sec.", @""), freq / 10.0]];
116 - (void)adjustGraphWindowControls
117 {       
118         id      obj;
119         
120         BOOL enabled = [[currentSettings objectForKey:SHOW_GRAPH_WINDOW_KEY] boolValue];
121         NSColor *color = enabled ? [NSColor controlTextColor] : [NSColor controlHighlightColor];
122         NSEnumerator *enumerator = [[graphWindowOptionsView subviews] objectEnumerator];
123         
124         while ((obj = [enumerator nextObject])) {
125                 if ([obj isMemberOfClass:[NSTextField class]])
126                         [obj setTextColor:color];
127                 else
128                         [obj setEnabled:enabled];
129         }
133 - (IBAction)showPreferences:(id)sender
135         double  freq;
136         
137         if (! panel) {
138                 if ([NSBundle loadNibNamed:@"Preferences" owner:self])
139                         [panel center];
140                 else {
141                         NSLog (@"Failed to load Preferences.nib");
142                         return;
143                 }
144         }
145         
146         [wiredColor setColor:[currentSettings objectForKey:WIRED_COLOR_KEY]];
147         [activeColor setColor:[currentSettings objectForKey:ACTIVE_COLOR_KEY]];
148         [inactiveColor setColor:[currentSettings objectForKey:INACTIVE_COLOR_KEY]];
149         [freeColor setColor:[currentSettings objectForKey:FREE_COLOR_KEY]];
150         [pageinColor setColor:[currentSettings objectForKey:PAGEIN_COLOR_KEY]];
151         [pageoutColor setColor:[currentSettings objectForKey:PAGEOUT_COLOR_KEY]];
152         [pagingScale selectItemAtIndex:[pagingScale
153                 indexOfItemWithTag:[[currentSettings objectForKey:PAGING_SCALE_MAX_KEY] intValue]]];
154         [pageinAtopPageout selectCellWithTag:[[currentSettings objectForKey:PAGEIN_ATOP_PAGEOUT_KEY] intValue]];
155         [showPagingRate setState:[[currentSettings objectForKey:SHOW_PAGING_RATE_KEY] boolValue]];
158         [userColor setColor:[currentSettings objectForKey:USER_COLOR_KEY]];
159         [sysColor setColor:[currentSettings objectForKey:SYS_COLOR_KEY]];
160         [niceColor setColor:[currentSettings objectForKey:NICE_COLOR_KEY]];
161         [idleColor setColor:[currentSettings objectForKey:IDLE_COLOR_KEY]];
163         freq = [[currentSettings objectForKey:UPDATE_FREQUENCY_KEY] floatValue];
164         [self showUpdateFrequency:(int)freq];
165         [updateFrequencySlider setFloatValue:1000.0 * log(freq)];
166         [showGraphWindow setState:[[currentSettings objectForKey:SHOW_GRAPH_WINDOW_KEY] boolValue]];
167         [graphWindowOnTop setState:[[currentSettings objectForKey:GRAPH_WINDOW_ON_TOP_KEY] boolValue]];
168         [graphWindowSize setFloatValue:[[currentSettings objectForKey:GRAPH_WINDOW_SIZE_KEY] floatValue]];
169         [dockIconSizeSlider setFloatValue:[[currentSettings objectForKey:DOCK_ICON_SIZE_KEY] floatValue]];
170         [self adjustGraphWindowControls];
171         [panel makeKeyAndOrderFront:nil];
175 - (IBAction)revertToDefaults:(id)sender
177         [currentSettings release];
178         currentSettings = [Preferences defaultPreferences];
179         [self showPreferences:sender];
180         [[NSNotificationCenter defaultCenter] postNotificationName:PREFERENCES_CHANGED object:nil];
184 - (void)savePreferences
186         id              obj;
187         float           r, g, b, a;
188         NSString        *key;
189         
190         NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
191         NSEnumerator *enumerator = [currentSettings keyEnumerator];
193         while ((key = [enumerator nextObject])) {
194                 obj = [currentSettings objectForKey:key];
195                 if ([obj isKindOfClass:[NSColor class]]) {
196                         [[obj colorUsingColorSpaceName:@"NSCalibratedRGBColorSpace"]
197                                 getRed:&r green:&g blue:&b alpha:&a];
198                         [obj release];
199                         obj = [NSString stringWithFormat:@"%f %f %f %f", r, g, b, a];
200                 }
201                 [defaults setObject:obj forKey:key];
202         }
206 - (id)objectForKey:(id)key
208         return ([currentSettings objectForKey:key]);
212 - (IBAction)preferencesChanged:(id)sender
214         int     freq;
215         
216         [currentSettings setObject:[wiredColor color] forKey:WIRED_COLOR_KEY];
217         [currentSettings setObject:[activeColor color] forKey:ACTIVE_COLOR_KEY];
218         [currentSettings setObject:[inactiveColor color] forKey:INACTIVE_COLOR_KEY];
219         [currentSettings setObject:[freeColor color] forKey:FREE_COLOR_KEY];
220         [currentSettings setObject:[pageinColor color] forKey:PAGEIN_COLOR_KEY];
221         [currentSettings setObject:[pageoutColor color] forKey:PAGEOUT_COLOR_KEY];
222         [currentSettings setObject:[NSNumber numberWithInt:[[pagingScale selectedItem] tag]] forKey:PAGING_SCALE_MAX_KEY];
223         [currentSettings setObject:[NSNumber numberWithInt:[[pageinAtopPageout selectedCell] tag]] forKey:PAGEIN_ATOP_PAGEOUT_KEY];
224         [currentSettings setObject:[NSNumber numberWithInt:[showPagingRate state]] forKey:SHOW_PAGING_RATE_KEY];
229         [currentSettings setObject:[userColor color] forKey:USER_COLOR_KEY];
230         [currentSettings setObject:[sysColor color] forKey:SYS_COLOR_KEY];
231         [currentSettings setObject:[niceColor color] forKey:NICE_COLOR_KEY];
232         [currentSettings setObject:[idleColor color] forKey:IDLE_COLOR_KEY];
234         freq = exp([updateFrequencySlider doubleValue] / 1000.0);       /* 1..600 == 0.1 sec. to 1 min. */
235         [self showUpdateFrequency:freq];
236         [currentSettings setObject:[NSNumber numberWithInt:freq] forKey:UPDATE_FREQUENCY_KEY];
237         [currentSettings setObject:[NSNumber numberWithInt:[showGraphWindow state]] forKey:SHOW_GRAPH_WINDOW_KEY];
238         [currentSettings setObject:[NSNumber numberWithInt:[graphWindowOnTop state]] forKey:GRAPH_WINDOW_ON_TOP_KEY];
239         [currentSettings setObject:[NSNumber numberWithInt:[graphWindowSize intValue]] forKey:GRAPH_WINDOW_SIZE_KEY];
240         [currentSettings setObject:[NSNumber numberWithFloat:[dockIconSizeSlider floatValue]] forKey:DOCK_ICON_SIZE_KEY];
241         [self adjustGraphWindowControls];
242         [[NSNotificationCenter defaultCenter] postNotificationName:PREFERENCES_CHANGED object:nil];
246 - (int)windowNumber
248         return (panel ? [panel windowNumber] : 0);
252 @end