-
Notifications
You must be signed in to change notification settings - Fork 22
/
MatrixPrefsWindow.m
129 lines (119 loc) · 4.86 KB
/
MatrixPrefsWindow.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
// This file is part of Red Pill
// A 3D OpenGL "Matrix" screensaver for Mac OS X
// Copyright (C) 2002, 2003 mathew <meta@pobox.com>
// Copyright (C) 2016 px3 <rr@rdsroot.net>
//
// Red Pill is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
// or visit <URL:http://www.fsf.org/>
#import "MatrixPrefsWindow.h"
@implementation MatrixPrefsWindow
- (NSWindow *)window
{
// Initialize parent
NSWindow *w = [super window];
// Work out what our defaults are called
NSString *identifier = [[NSBundle bundleForClass:[self class]] bundleIdentifier];
if(identifier == nil) {
LogError("window", "Trying to load preferences but identifier is nil.");
return w;
}
// Load defaults
ScreenSaverDefaults *defaults = [ScreenSaverDefaults defaultsForModuleWithName:identifier];
// Initialize the UI elements
[strips setFloatValue:[defaults floatForKey:STRIPS_KEY]];
[velocity setFloatValue:[defaults floatForKey:VELOCITY_KEY]];
[depth setFloatValue:[defaults floatForKey:DEPTH_KEY]];
[cycling setFloatValue:[defaults floatForKey:CYCLING_KEY]];
[falling setFloatValue:[defaults floatForKey:FALLING_KEY]];
[cursor setFloatValue:[defaults floatForKey:CURSOR_KEY]];
[fog setFloatValue:[defaults floatForKey:FOG_KEY]];
[topstart setState:[defaults boolForKey:TOPSTART_KEY]];
[mainonly setState:[defaults boolForKey:MAINONLY_KEY]];
// Find out version from bundle
NSBundle *bundle = [NSBundle bundleForClass:[self class]];
NSMutableString *versionString = [[NSMutableString alloc]
initWithString:[bundle infoDictionary][@"CFBundleShortVersionString"]];
[version setStringValue:versionString];
[spoon setState:FALSE];
// Hide spoon mode most of the time
if ((random() % 5) != 3) {
[spoon setTransparent:TRUE];
} else {
[spoon setTransparent:FALSE];
}
return w;
}
// Reset the values of the sliders to their defaults
- (IBAction)reset:(id)sender
{
[strips setFloatValue:[STRIPS_DEFAULT floatValue]];
[velocity setFloatValue:[VELOCITY_DEFAULT floatValue]];
[depth setFloatValue:[DEPTH_DEFAULT floatValue]];
[cycling setFloatValue:[CYCLING_DEFAULT floatValue]];
[falling setFloatValue:[FALLING_DEFAULT floatValue]];
[cursor setFloatValue:[CURSOR_DEFAULT floatValue]];
[fog setFloatValue:[FOG_DEFAULT floatValue]];
[topstart setState:TOPSTART_DEFAULT_BOOLEAN];
[mainonly setState:MAINONLY_DEFAULT_BOOLEAN];
}
// The About button takes them to a web site
- (IBAction)about:(id)sender
{
[[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:@"https://wwm4u.de/redpill"]];
}
- (IBAction)cancel:(id)sender
{
[NSApp endSheet:[self window]];
}
- (IBAction)spoonclick:(id)sender
{
[spoon setTransparent:FALSE];
}
- (IBAction)ok:(id)sender
{
// Work out what our defaults are called
NSString *identifier = [[NSBundle bundleForClass:[self class]] bundleIdentifier];
if(identifier == nil) {
LogError("ok", "Trying to save preferences but identifier is nil.");
[NSApp endSheet:[self window]];
return;
}
// Load defaults
ScreenSaverDefaults *defaults = [ScreenSaverDefaults defaultsForModuleWithName:identifier];
// Set values based on new positions and states of UI elements
[defaults setFloat:[strips floatValue] forKey:STRIPS_KEY];
[defaults setFloat:[velocity floatValue] forKey:VELOCITY_KEY];
[defaults setFloat:[depth floatValue] forKey:DEPTH_KEY];
[defaults setFloat:[cycling floatValue] forKey:CYCLING_KEY];
[defaults setFloat:[falling floatValue] forKey:FALLING_KEY];
[defaults setFloat:[cursor floatValue] forKey:CURSOR_KEY];
[defaults setFloat:[fog floatValue] forKey:FOG_KEY];
[defaults setBool:[topstart state] forKey:TOPSTART_KEY];
[defaults setBool:[mainonly state] forKey:MAINONLY_KEY];
// Plug web site if user selects spoon mode
if ([spoon state] == TRUE) {
NSAlert *alert = [[NSAlert alloc] init];
alert.messageText = @"Realize";
alert.informativeText = @"There is no spoon.";
[alert runModal];
[self about:sender];
}
// Update to disk
[defaults synchronize];
// Tell the main scrensaver loop to reload the preferences from us
[[NSNotificationCenter defaultCenter] postNotificationName:PREFS_NOTIFICATION object:nil];
[NSApp endSheet:[self window]];
}
@end