forked from erkyrath/Inform7-IDE-Mac
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathIFSetting.m
136 lines (98 loc) · 2.67 KB
/
IFSetting.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
130
131
132
133
134
135
136
//
// IFSetting.m
// Inform
//
// Created by Andrew Hunter on 06/10/2004.
// Copyright 2004 Andrew Hunter. All rights reserved.
//
#import "IFSetting.h"
NSString* IFSettingHasChangedNotification = @"IFSettingHasChangedNotification";
@implementation IFSetting
// = Initialisation =
- (id) init {
return [self initWithNibName: nil];
}
- (id) initWithNibName: (NSString*) nibName {
self = [super init];
if (self) {
settingView = nil;
settingsChanging = NO;
if (nibName != nil)
[NSBundle loadNibNamed: nibName
owner: self];
}
return self;
}
- (void) dealloc {
if (settingView) [settingView release];
[super dealloc];
}
// = Setting up the view =
- (NSView*) settingView {
return settingView;
}
- (void) setSettingView: (NSView*) newSettingView {
if (settingView) [settingView release];
settingView = [newSettingView retain];
}
- (NSString*) title {
return @"Setting";
}
// = Setting/retrieving the model =
- (void) setCompilerSettings: (IFCompilerSettings*) newSettings {
compilerSettings = newSettings;
}
- (IFCompilerSettings*) compilerSettings {
return compilerSettings;
}
// = Communicating with the IFCompilerSettings object =
- (void) setSettings {
// Do nothing
}
- (void) updateFromCompilerSettings {
// Do nothing
}
- (BOOL) enableForCompiler: (NSString*) compiler {
return YES;
}
- (NSArray*) commandLineOptionsForCompiler: (NSString*) compiler {
return nil;
}
- (NSArray*) includePathForCompiler: (NSString*) compiler {
return nil;
}
- (NSMutableDictionary*) dictionary {
if (compilerSettings) {
return [compilerSettings dictionaryForClass: [self class]];
}
return nil;
}
// = Notifying the controller about things =
- (IBAction) settingsHaveChanged: (id) sender {
if (settingsChanging) return;
settingsChanging = YES;
[[NSNotificationCenter defaultCenter] postNotificationName: IFSettingHasChangedNotification
object: self];
settingsChanging = NO;
}
// = Default way of dealing with the plist: copy entries from the dictionary =
- (NSDictionary*) plistEntries {
return [self dictionary];
}
- (void) updateSettings: (IFCompilerSettings*) settings
withPlistEntries: (NSDictionary*) entries {
if ([[entries allKeys] count] <= 0) return; // nothing to do
NSMutableDictionary* dict = [self dictionary];
if (entries == dict) return; // Really, just sanity checking: this shouldn't happen
[dict removeAllObjects];
// Load entries from the list of entries
NSEnumerator* keyEnum = [entries keyEnumerator];
NSString* key;
while (key = [keyEnum nextObject]) {
[dict setObject: [entries objectForKey: key]
forKey: key];
}
// Cause the settings to be updated
[self updateFromCompilerSettings];
}
@end