diff options
| author | Simon Tatham <anakin@pobox.com> | 2017-10-01 13:38:35 +0100 |
|---|---|---|
| committer | Simon Tatham <anakin@pobox.com> | 2017-10-01 16:34:41 +0100 |
| commit | de67801b0fd3dfa11777c1ef86cd617baf376b7b (patch) | |
| tree | f632daee458c8fefcfc90ff809c44672adeedaa4 /osx.m | |
| parent | eeb2db283de9115f7256fa4cc49597d63e06b0ab (diff) | |
| download | puzzles-de67801b0fd3dfa11777c1ef86cd617baf376b7b.zip puzzles-de67801b0fd3dfa11777c1ef86cd617baf376b7b.tar.gz puzzles-de67801b0fd3dfa11777c1ef86cd617baf376b7b.tar.bz2 puzzles-de67801b0fd3dfa11777c1ef86cd617baf376b7b.tar.xz | |
Use a proper union in struct config_item.
This allows me to use different types for the mutable, dynamically
allocated string value in a C_STRING control and the fixed constant
list of option names in a C_CHOICES.
Diffstat (limited to 'osx.m')
| -rw-r--r-- | osx.m | 24 |
1 files changed, 14 insertions, 10 deletions
@@ -1103,7 +1103,8 @@ struct frontend { [tf setEditable:YES]; [tf setSelectable:YES]; [tf setBordered:YES]; - [[tf cell] setTitle:[NSString stringWithUTF8String:i->sval]]; + [[tf cell] setTitle:[NSString + stringWithUTF8String:i->u.string.sval]]; [tf sizeToFit]; rect = [tf frame]; /* @@ -1132,7 +1133,7 @@ struct frontend { [b setButtonType:NSSwitchButton]; [b setTitle:[NSString stringWithUTF8String:i->name]]; [b sizeToFit]; - [b setState:(i->ival ? NSOnState : NSOffState)]; + [b setState:(i->u.boolean.bval ? NSOnState : NSOffState)]; rect = [b frame]; if (totalw < rect.size.width + 1) totalw = rect.size.width + 1; if (thish < rect.size.height + 1) thish = rect.size.height + 1; @@ -1161,12 +1162,14 @@ struct frontend { pb = [[NSPopUpButton alloc] initWithFrame:tmprect pullsDown:NO]; [pb setBezelStyle:NSRoundedBezelStyle]; { - char c, *p; + char c; + const char *p; - p = i->sval; + p = i->u.choices.choicenames; c = *p++; while (*p) { - char *q, *copy; + const char *q; + char *copy; q = p; while (*p && *p != c) p++; @@ -1180,7 +1183,7 @@ struct frontend { if (*p) p++; } } - [pb selectItemAtIndex:i->ival]; + [pb selectItemAtIndex:i->u.choices.selected]; [pb sizeToFit]; rect = [pb frame]; @@ -1303,17 +1306,18 @@ struct frontend { for (i = cfg; i->type != C_END; i++) { switch (i->type) { case C_STRING: - sfree(i->sval); - i->sval = dupstr([[[(id)cfg_controls[k+1] cell] + sfree(i->u.string.sval); + i->u.string.sval = dupstr([[[(id)cfg_controls[k+1] cell] title] UTF8String]); k += 2; break; case C_BOOLEAN: - i->ival = [(id)cfg_controls[k] state] == NSOnState; + i->u.boolean.bval = [(id)cfg_controls[k] state] == NSOnState; k++; break; case C_CHOICES: - i->ival = [(id)cfg_controls[k+1] indexOfSelectedItem]; + i->u.choices.selected = + [(id)cfg_controls[k+1] indexOfSelectedItem]; k += 2; break; } |