Skip to content

Commit

Permalink
set locked
Browse files Browse the repository at this point in the history
  • Loading branch information
groverlynn committed Feb 26, 2024
1 parent 06883fd commit 71e87cd
Show file tree
Hide file tree
Showing 6 changed files with 215 additions and 173 deletions.
21 changes: 9 additions & 12 deletions SquirrelApplicationDelegate.m
Original file line number Diff line number Diff line change
Expand Up @@ -174,21 +174,21 @@ - (void)shutdownRime {
}

NSArray<NSString *> *getScriptOptionsForSchema(SquirrelConfig *schema) {
NSUInteger numSwitches = [schema getListSize:@"switches"];
NSUInteger numSwitches = [schema getListSizeForOption:@"switches"];
if (numSwitches == 0) {
return nil;
}
for (NSUInteger i = 0; i < numSwitches; ++i) {
NSString *name = [schema getString:[NSString stringWithFormat:
@"switches/@%lu/name", i]];
NSString *name = [schema getStringForOption:[NSString stringWithFormat:
@"switches/@%lu/name", i]];
if (name) {
if ([name isEqualToString:@"simplification"] ||
[name isEqualToString:@"traditional"]) {
return @[name];
}
} else {
NSArray *options = [schema getList:[NSString stringWithFormat:
@"switches/@%lu/options", i]];
NSArray *options = [schema getListForOption:[NSString stringWithFormat:
@"switches/@%lu/options", i]];
if ([options containsObject:@"simplification"] ||
[options containsObject:@"traditional"]) {
return options;
Expand Down Expand Up @@ -228,16 +228,15 @@ - (void)loadSettings {
return;
}

NSString *showNotificationsWhen = [_config getString:@"show_notifications_when"];
NSString *showNotificationsWhen = [_config getStringForOption:@"show_notifications_when"];
if ([showNotificationsWhen isEqualToString:@"never"]) {
_showNotifications = kShowNotificationsNever;
} else if ([showNotificationsWhen isEqualToString:@"appropriate"]) {
_showNotifications = kShowNotificationsWhenAppropriate;
} else {
_showNotifications = kShowNotificationsAlways;
}
[self.panel loadConfig:_config forAppearance:defaultAppear];
[self.panel loadConfig:_config forAppearance:darkAppear];
[self.panel loadConfig:_config];
}

- (void)loadSchemaSpecificSettings:(NSString *)schemaId
Expand All @@ -251,12 +250,10 @@ - (void)loadSchemaSpecificSettings:(NSString *)schemaId
[schema hasSection:@"style"]) {
SquirrelOptionSwitcher *optionSwitcher = [schema getOptionSwitcher];
self.panel.optionSwitcher = updateOptionSwitcher(optionSwitcher, sessionId);
[self.panel loadConfig:schema forAppearance:defaultAppear];
[self.panel loadConfig:schema forAppearance:darkAppear];
[self.panel loadConfig:schema];
} else {
self.panel.optionSwitcher = [[SquirrelOptionSwitcher alloc] initWithSchemaId:schemaId];
[self.panel loadConfig:self.config forAppearance:defaultAppear];
[self.panel loadConfig:self.config forAppearance:darkAppear];
[self.panel loadConfig:self.config];
}
[schema close];
}
Expand Down
35 changes: 19 additions & 16 deletions SquirrelConfig.h
Original file line number Diff line number Diff line change
Expand Up @@ -45,25 +45,28 @@ typedef NSMutableDictionary<NSString *, NSNumber *> SquirrelMutableAppOptions;

- (BOOL)hasSection:(NSString *)section;

- (BOOL)getBool:(NSString *)option;
- (int)getInt:(NSString *)option;
- (double)getDouble:(NSString *)option;
- (double)getDouble:(NSString *)option
applyConstraint:(double(*)(double param))func;
- (NSNumber *)getOptionalBool:(NSString *)option;
- (NSNumber *)getOptionalInt:(NSString *)option;
- (NSNumber *)getOptionalDouble:(NSString *)option;
- (NSNumber *)getOptionalDouble:(NSString *)option
applyConstraint:(double(*)(double param))func;

- (NSString *)getString:(NSString *)option;
- (BOOL)getBoolForOption:(NSString *)option;
- (BOOL)setBool:(bool)value forOption:(NSString *)option;
- (int)getIntForOption:(NSString *)option;
- (BOOL)setInt:(int)value forOption:(NSString *)option;
- (double)getDoubleForOption:(NSString *)option;
- (BOOL)setDouble:(double)value forOption:(NSString *)option;
- (double)getDoubleForOption:(NSString *)option
applyConstraint:(double(*)(double param))func;
- (NSNumber *)getOptionalBoolForOption:(NSString *)option;
- (NSNumber *)getOptionalIntForOption:(NSString *)option;
- (NSNumber *)getOptionalDoubleForOption:(NSString *)option;
- (NSNumber *)getOptionalDoubleForOption:(NSString *)option
applyConstraint:(double(*)(double param))func;

- (NSString *)getStringForOption:(NSString *)option;
// 0xaabbggrr or 0xbbggrr
- (NSColor *)getColor:(NSString *)option;
- (NSColor *)getColorForOption:(NSString *)option;
// file path (absolute or relative to ~/Library/Rime)
- (NSImage *)getImage:(NSString *)option;
- (NSImage *)getImageForOption:(NSString *)option;

- (NSUInteger)getListSize:(NSString *)option;
- (NSArray<NSString *> *)getList:(NSString *)option;
- (NSUInteger)getListSizeForOption:(NSString *)option;
- (NSArray<NSString *> *)getListForOption:(NSString *)option;

- (SquirrelOptionSwitcher *)getOptionSwitcher;
- (SquirrelAppOptions *)getAppOptions:(NSString *)appName;
Expand Down
83 changes: 48 additions & 35 deletions SquirrelConfig.m
Original file line number Diff line number Diff line change
Expand Up @@ -137,25 +137,38 @@ - (BOOL)hasSection:(NSString *)section {
return NO;
}

- (BOOL)getBool:(NSString *)option {
return [self getOptionalBool:option].boolValue;
- (BOOL)getBoolForOption:(NSString *)option {
return [self getOptionalBoolForOption:option].boolValue;
}

- (int)getInt:(NSString *)option {
return [self getOptionalInt:option].intValue;
- (BOOL)setBool:(bool)value forOption:(NSString *)option {
return (BOOL)(rime_get_api()->config_set_bool(&_config, option.UTF8String, value));
}

- (double)getDouble:(NSString *)option {
return [self getOptionalDouble:option].doubleValue;
- (int)getIntForOption:(NSString *)option {
return [self getOptionalIntForOption:option].intValue;
}

- (double)getDouble:(NSString *)option
applyConstraint:(double(*)(double param))func {
NSNumber *value = [self getOptionalDouble:option];
- (BOOL)setInt:(int)value forOption:(NSString *)option {
return (BOOL)(rime_get_api()->config_set_int(&_config, option.UTF8String, value));
}

- (double)getDoubleForOption:(NSString *)option {
return [self getOptionalDoubleForOption:option].doubleValue;
}

- (BOOL)setDouble:(double)value forOption:(NSString *)option {
return (BOOL)(rime_get_api()->config_set_double(&_config, option.UTF8String, value));
}


- (double)getDoubleForOption:(NSString *)option
applyConstraint:(double(*)(double param))func {
NSNumber *value = [self getOptionalDoubleForOption:option];
return func(value.doubleValue);
}

- (NSNumber *)getOptionalBool:(NSString *)option {
- (NSNumber *)getOptionalBoolForOption:(NSString *)option {
NSNumber *cachedValue = [self cachedValueOfObjCType:@encode(BOOL) forKey:option];
if (cachedValue) {
return cachedValue;
Expand All @@ -166,10 +179,10 @@ - (NSNumber *)getOptionalBool:(NSString *)option {
[_cache setObject:number forKey:option];
return number;
}
return [_baseConfig getOptionalBool:option];
return [_baseConfig getOptionalBoolForOption:option];
}

- (NSNumber *)getOptionalInt:(NSString *)option {
- (NSNumber *)getOptionalIntForOption:(NSString *)option {
NSNumber *cachedValue = [self cachedValueOfObjCType:@encode(int) forKey:option];
if (cachedValue) {
return cachedValue;
Expand All @@ -180,10 +193,10 @@ - (NSNumber *)getOptionalInt:(NSString *)option {
[_cache setObject:number forKey:option];
return number;
}
return [_baseConfig getOptionalInt:option];
return [_baseConfig getOptionalIntForOption:option];
}

- (NSNumber *)getOptionalDouble:(NSString *)option {
- (NSNumber *)getOptionalDoubleForOption:(NSString *)option {
NSNumber *cachedValue = [self cachedValueOfObjCType:@encode(double) forKey:option];
if (cachedValue) {
return cachedValue;
Expand All @@ -194,16 +207,16 @@ - (NSNumber *)getOptionalDouble:(NSString *)option {
[_cache setObject:number forKey:option];
return number;
}
return [_baseConfig getOptionalDouble:option];
return [_baseConfig getOptionalDoubleForOption:option];
}

- (NSNumber *)getOptionalDouble:(NSString *)option
applyConstraint:(double(*)(double param))func {
NSNumber *value = [self getOptionalDouble:option];
- (NSNumber *)getOptionalDoubleForOption:(NSString *)option
applyConstraint:(double(*)(double param))func {
NSNumber *value = [self getOptionalDoubleForOption:option];
return value ? [NSNumber numberWithDouble:func(value.doubleValue)] : nil;
}

- (NSString *)getString:(NSString *)option {
- (NSString *)getStringForOption:(NSString *)option {
NSString *cachedValue = [self cachedValueOfClass:NSString.class forKey:option];
if (cachedValue) {
return cachedValue;
Expand All @@ -216,47 +229,47 @@ - (NSString *)getString:(NSString *)option {
[_cache setObject:string forKey:option];
return string;
}
return [_baseConfig getString:option];
return [_baseConfig getStringForOption:option];
}

- (NSColor *)getColor:(NSString *)option {
- (NSColor *)getColorForOption:(NSString *)option {
NSColor *cachedValue = [self cachedValueOfClass:NSColor.class forKey:option];
if (cachedValue) {
return cachedValue;
}
NSColor *color = [self colorFromString:[self getString:option]];
NSColor *color = [self colorFromString:[self getStringForOption:option]];
if (color) {
[_cache setObject:color forKey:option];
return color;
}
return [_baseConfig getColor:option];
return [_baseConfig getColorForOption:option];
}

- (NSImage *)getImage:(NSString *)option {
- (NSImage *)getImageForOption:(NSString *)option {
NSImage *cachedValue = [self cachedValueOfClass:NSImage.class forKey:option];
if (cachedValue) {
return cachedValue;
}
NSImage *image = [self imageFromFile:[self getString:option]];
NSImage *image = [self imageFromFile:[self getStringForOption:option]];
if (image) {
[_cache setObject:image forKey:option];
return image;
}
return [_baseConfig getImage:option];
return [_baseConfig getImageForOption:option];
}

- (NSUInteger)getListSize:(NSString *)option {
- (NSUInteger)getListSizeForOption:(NSString *)option {
return rime_get_api()->config_list_size(&_config, option.UTF8String);
}

- (NSArray<NSString *> *)getList:(NSString *)option {
- (NSArray<NSString *> *)getListForOption:(NSString *)option {
RimeConfigIterator iterator;
if (!rime_get_api()->config_begin_list(&iterator, &_config, option.UTF8String)) {
return nil;
}
NSMutableArray *strList = [[NSMutableArray alloc] init];
while (rime_get_api()->config_next(&iterator)) {
[strList addObject:[self getString:@(iterator.path)]];
[strList addObject:[self getStringForOption:@(iterator.path)]];
}
rime_get_api()->config_end(&iterator);
return strList;
Expand All @@ -270,8 +283,8 @@ - (SquirrelOptionSwitcher *)getOptionSwitcher {
NSMutableDictionary *switcher = [[NSMutableDictionary alloc] init];
NSMutableDictionary *optionGroups = [[NSMutableDictionary alloc] init];
while (rime_get_api()->config_next(&switchIter)) {
int reset = [self getInt:[@(switchIter.path) stringByAppendingString:@"/reset"]];
NSString *name = [self getString:[@(switchIter.path) stringByAppendingString:@"/name"]];
int reset = [self getIntForOption:[@(switchIter.path) stringByAppendingString:@"/reset"]];
NSString *name = [self getStringForOption:[@(switchIter.path) stringByAppendingString:@"/name"]];
if (name) {
if ([self hasSection:[@"style/!" stringByAppendingString:name]] ||
[self hasSection:[@"style/" stringByAppendingString:name]]) {
Expand All @@ -287,7 +300,7 @@ - (SquirrelOptionSwitcher *)getOptionSwitcher {
NSMutableArray *optionGroup = [[NSMutableArray alloc] init];
BOOL hasStyleSection = NO;
while (rime_get_api()->config_next(&optionIter)) {
NSString *option = [self getString:@(optionIter.path)];
NSString *option = [self getStringForOption:@(optionIter.path)];
[optionGroup addObject:option];
hasStyleSection |= [self hasSection:[@"style/" stringByAppendingString:option]];
}
Expand Down Expand Up @@ -315,9 +328,9 @@ - (SquirrelAppOptions *)getAppOptions:(NSString *)appName {
}
while (rime_get_api()->config_next(&iterator)) {
//NSLog(@"DEBUG option[%d]: %s (%s)", iterator.index, iterator.key, iterator.path);
NSNumber *value = [self getOptionalBool:@(iterator.path)] ? :
[self getOptionalInt:@(iterator.path)] ? :
[self getOptionalDouble:@(iterator.path)];
NSNumber *value = [self getOptionalBoolForOption:@(iterator.path)] ? :
[self getOptionalIntForOption:@(iterator.path)] ? :
[self getOptionalDoubleForOption:@(iterator.path)];
if (value) {
appOptions[@(iterator.key)] = value;
}
Expand Down
6 changes: 3 additions & 3 deletions SquirrelInputController.m
Original file line number Diff line number Diff line change
Expand Up @@ -415,7 +415,7 @@ - (void)updateChord:(int)keycode
}
_chordDuration = 0.1;
NSNumber *duration = [NSApp.squirrelAppDelegate.config
getOptionalDouble:@"chord_duration"];
getOptionalDoubleForOption:@"chord_duration"];
if (duration.doubleValue > 0) {
_chordDuration = duration.doubleValue;
}
Expand Down Expand Up @@ -484,7 +484,7 @@ - (void)showInitialStatus {
- (void)activateServer:(id)sender {
//NSLog(@"activateServer:");
NSString *keyboardLayout = [NSApp.squirrelAppDelegate.config
getString:@"keyboard_layout"];
getStringForOption:@"keyboard_layout"];
if ([keyboardLayout isEqualToString:@"last"] ||
[keyboardLayout isEqualToString:@""]) {
keyboardLayout = nil;
Expand All @@ -510,7 +510,7 @@ - (void)activateServer:(id)sender {
SquirrelConfig *defaultConfig = [[SquirrelConfig alloc] init];
if ([defaultConfig openWithConfigId:@"default"] &&
[defaultConfig hasSection:@"ascii_composer"]) {
_goodOldCapsLock = [defaultConfig getBool:
_goodOldCapsLock = [defaultConfig getBoolForOption:
@"ascii_composer/good_old_caps_lock"];
}
[defaultConfig close];
Expand Down
3 changes: 1 addition & 2 deletions SquirrelPanel.h
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,7 @@ typedef NS_ENUM(NSUInteger, SquirrelAppear) {
- (void)updateStatusLong:(NSString *)messageLong
statusShort:(NSString *)messageShort;

- (void)loadConfig:(SquirrelConfig *)config
forAppearance:(SquirrelAppear)appear;
- (void)loadConfig:(SquirrelConfig *)config;

- (void)loadLabelConfig:(SquirrelConfig *)config
directUpdate:(BOOL)update;
Expand Down
Loading

0 comments on commit 71e87cd

Please sign in to comment.