33@interface PlayerEntity (StickMapperInternal)
36- (void) checkCustomEquipButtons:(NSDictionary *)stickFn ignore:(
int)idx;
37- (void) removeFunction:(
int)selFunctionIdx;
40 skip:(NSUInteger) skip;
41- (NSString *)describeStickDict:(NSDictionary *)stickDict;
42- (NSString *)hwToString:(
int)hwFlags;
47@implementation PlayerEntity (StickMapper)
49- (void) resetStickFunctions
51 [stickFunctions release];
56- (void) setGuiToStickMapperScreen:(
unsigned)skip
58 [
self setGuiToStickMapperScreen: skip resetCurrentRow: NO];
61- (void) setGuiToStickMapperScreen:(
unsigned)skip resetCurrentRow: (BOOL) resetCurrentRow
65 NSArray *stickList = [stickHandler
listSticks];
66 unsigned stickCount = [stickList count];
75 gui_screen = GUI_SCREEN_STICKMAPPER;
77 [gui
setTitle:[NSString stringWithFormat:@"Configure Joysticks"]];
79 for(i=0; i < stickCount; i++)
81 NSString *stickNameForThisRow = [NSString stringWithFormat: @"Stick %d %@", i+1, [stickList objectAtIndex: i]];
83 NSString *stickNameAdditional =
nil;
88 stickNameForThisRow = [[stickNameForThisRow substringToIndex:[stickNameForThisRow length] - 5]
89 stringByAppendingString:@"..."];
95 stickNameAdditional = [NSString stringWithFormat: @"Stick %d %@", j+1, [stickList objectAtIndex: j]];
100 stickNameAdditional = [[stickNameAdditional substringToIndex:[stickNameAdditional length] - 5]
101 stringByAppendingString:@"..."];
105 [gui
setArray:[NSArray arrayWithObjects:
110 forRow:i + GUI_ROW_STICKNAME];
113 [gui
setArray: [NSArray arrayWithObjects: DESC(@"stickmapper-profile"), nil]
forRow: GUI_ROW_STICKPROFILE];
115 [
self displayFunctionList:gui skip:skip];
117 [gui
setArray:[NSArray arrayWithObject:@"Select a function and press Enter to modify or 'u' to unset."]
120 [gui
setText:@"Space to return to previous screen."
forRow:GUI_ROW_INSTRUCT+1
align:GUI_ALIGN_CENTER];
126 [[UNIVERSE gameView] suppressKeysUntilKeyUp];
139 if(waitingForStickCallback)
141 if([gameView isDown: 27])
144 [gui
setArray: [NSArray arrayWithObjects:
145 @"Function setting aborted.", nil]
146 forRow: GUI_ROW_INSTRUCT];
147 waitingForStickCallback=NO;
154 [
self handleGUIUpDownArrowKeys];
158 [
self setGuiToStickProfileScreen: gui];
163 if ([key hasPrefix:
@"Index:"])
164 selFunctionIdx=[[[key componentsSeparatedByString:
@":"] objectAtIndex: 1] intValue];
168 if([gameView isDown: 13])
170 if ([key hasPrefix:
@"More:"])
172 int from_function = [[[key componentsSeparatedByString:@":"] objectAtIndex: 1] intValue];
173 if (from_function < 0) from_function = 0;
175 [
self setGuiToStickMapperScreen:from_function];
176 if ([[
UNIVERSE gui] selectedRow] < 0)
177 [[UNIVERSE gui] setSelectedRow: GUI_ROW_FUNCSTART];
178 if (from_function == 0)
179 [[UNIVERSE gui] setSelectedRow: GUI_ROW_FUNCSTART + MAX_ROWS_FUNCTIONS - 1];
183 NSDictionary *entry=[stickFunctions objectAtIndex: selFunctionIdx];
184 int hw=[(NSNumber *)[entry objectForKey: KEY_ALLOWABLE] intValue];
190 NSString *instructions;
194 instructions =
@"Fully deflect the axis you want to use for this function. Esc aborts.";
197 instructions =
@"Press the button you want to use for this function. Esc aborts.";
200 instructions =
@"Press the button or deflect the axis you want to use for this function.";
202 [gui
setArray: [NSArray arrayWithObjects: instructions, nil]
forRow: GUI_ROW_INSTRUCT];
203 waitingForStickCallback=YES;
206 if([gameView isDown:
'u'])
208 if (selFunctionIdx >= 0) [
self removeFunction: selFunctionIdx];
215- (void) updateFunction: (NSDictionary *)hwDict
218 waitingForStickCallback = NO;
221 if(gui_screen != GUI_SCREEN_STICKMAPPER)
223 OOLog(
@"joystick.configure.error",
@"%s called when not on stick mapper screen.", __PRETTY_FUNCTION__);
228 NSDictionary *entry = [stickFunctions objectAtIndex:selFunctionIdx];
231 function=[entry oo_intForKey: KEY_AXISFN];
237#if OO_FOV_INFLIGHT_CONTROL_ENABLED
238 if (
function == AXIS_FIELD_OF_VIEW)
257 function = [entry oo_intForKey:KEY_BUTTONFN];
262#if OO_FOV_INFLIGHT_CONTROL_ENABLED
263 if (
function == BUTTON_INC_FIELD_OF_VIEW ||
function == BUTTON_DEC_FIELD_OF_VIEW)
278 if (
function >= 10000)
282 if (
function >= 10000)
287 NSMutableDictionary *custEquip = [[customEquipActivation objectAtIndex:function] mutableCopy];
288 [custEquip setObject:hwDict forKey:key];
289 [customEquipActivation replaceObjectAtIndex:function withObject:custEquip];
291 [
self checkCustomEquipButtons:hwDict ignore:function];
292 NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
293 [defaults setObject:customEquipActivation forKey:KEYCONFIG_CUSTOMEQUIP];
298 [
self checkCustomEquipButtons:hwDict ignore:-1];
313 [
self setGuiToStickMapperScreen:skip];
317- (void) checkCustomEquipButtons:(NSDictionary *)stickFn ignore:(
int)idx
320 for (i = 0; i < [customEquipActivation count]; i++)
323 NSMutableDictionary *custEquip = [[customEquipActivation objectAtIndex:i] mutableCopy];
324 NSDictionary *bf = [[customEquipActivation objectAtIndex:i] objectForKey:CUSTOMEQUIP_BUTTONACTIVATE];
329 [custEquip removeObjectForKey:CUSTOMEQUIP_BUTTONACTIVATE];
331 bf = [[customEquipActivation objectAtIndex:i] objectForKey:CUSTOMEQUIP_BUTTONMODE];
336 [custEquip removeObjectForKey:CUSTOMEQUIP_BUTTONMODE];
338 [customEquipActivation replaceObjectAtIndex:i withObject:custEquip];
345- (void) removeFunction:(
int)idx
348 NSDictionary *entry = [stickFunctions objectAtIndex:idx];
349 NSNumber *butfunc = [entry objectForKey:KEY_BUTTONFN];
350 NSNumber *axfunc = [entry objectForKey:KEY_AXISFN];
352 selFunctionIdx = idx;
359 if ([butfunc intValue] >= 10000)
361 int bf = [butfunc intValue];
370 NSMutableDictionary *custEquip = [[customEquipActivation objectAtIndex:bf] mutableCopy];
373 [customEquipActivation replaceObjectAtIndex:bf withObject:custEquip];
391 NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
392 [defaults setObject:customEquipActivation forKey:KEYCONFIG_CUSTOMEQUIP];
400 [
self setGuiToStickMapperScreen: skip];
405 skip:(NSUInteger)skip
410 [gui
setArray:[NSArray arrayWithObjects:
411 @"Function", @"Assigned to", @"Type", nil]
416 stickFunctions = [[
self stickFunctionList] retain];
421 NSUInteger i, n_functions = [stickFunctions count];
422 NSInteger n_rows, start_row, previous = 0;
424 if (skip >= n_functions)
425 skip = n_functions - 1;
454 [gui
setArray:[NSArray arrayWithObjects:DESC(@"gui-back"), @" <-- ", nil]
forRow:GUI_ROW_FUNCSTART];
455 [gui
setKey:[NSString stringWithFormat:@"More:%lld", previous]
forRow:GUI_ROW_FUNCSTART];
458 for(i=0; i < (n_functions - skip) && (
int)i < n_rows; i++)
460 NSDictionary *entry = [stickFunctions objectAtIndex: i + skip];
462 NSString *header = [entry objectForKey:KEY_HEADER];
463 [gui
setArray:[NSArray arrayWithObjects:header, @"", @"", nil]
forRow:i + start_row];
468 NSString *allowedThings;
469 NSString *assignment;
470 NSString *axFuncKey = [entry oo_stringForKey:KEY_AXISFN];
471 NSString *butFuncKey = [entry oo_stringForKey:KEY_BUTTONFN];
472 int allowable = [entry oo_intForKey:KEY_ALLOWABLE];
476 allowedThings=
@"Axis";
477 assignment=[
self describeStickDict:
478 [assignedAxes objectForKey: axFuncKey]];
481 allowedThings=
@"Button";
482 int bf = [butFuncKey integerValue];
485 assignment=[
self describeStickDict:
486 [assignedButs objectForKey: butFuncKey]];
497 assignment=[
self describeStickDict:
498 [[customEquipActivation objectAtIndex:bf] objectForKey:key]];
502 allowedThings=
@"Axis/Button";
505 assignment=[
self describeStickDict:
506 [assignedAxes objectForKey: axFuncKey]];
508 assignment=[
self describeStickDict:
509 [assignedButs objectForKey: butFuncKey]];
513 if (assignment ==
nil)
518 [gui
setArray: [NSArray arrayWithObjects:
519 [entry objectForKey: KEY_GUIDESC], assignment, allowedThings, nil]
522 [gui
setKey: [NSString stringWithFormat: @"Index:%llu", i + skip]
forRow: i + start_row];
525 if (i < n_functions - skip)
528 [gui
setArray: [NSArray arrayWithObjects: DESC(@"gui-more"), @" --> ", nil]
forRow: start_row + i];
529 [gui
setKey: [NSString stringWithFormat: @"More:%llu", n_rows + skip]
forRow: start_row + i];
533 [gui
setSelectableRange: NSMakeRange(GUI_ROW_STICKPROFILE, i + start_row - GUI_ROW_STICKPROFILE)];
539- (NSString *) describeStickDict: (NSDictionary *)stickDict
544 int thingNumber=[(NSNumber *)[stickDict objectForKey: STICK_AXBUT]
546 int stickNumber=[(NSNumber *)[stickDict objectForKey: STICK_NUMBER]
549 if([(NSNumber *)[stickDict objectForKey:
STICK_ISAXIS] boolValue])
551 desc=[NSString stringWithFormat: @"Stick %d axis %d",
552 stickNumber+1, thingNumber+1];
556 static const char dir[][6] = {
"up",
"right",
"down",
"left" };
557 desc=[NSString stringWithFormat: @"Stick %d hat %d %s",
558 stickNumber+1, (thingNumber - MAX_REAL_BUTTONS) / 4 + 1,
559 dir[thingNumber & 3]];
563 desc=[NSString stringWithFormat: @"Stick %d button %d",
564 stickNumber+1, thingNumber+1];
571- (NSString *)hwToString: (
int)hwFlags
580 hwString =
@"button";
583 hwString =
@"axis/button";
591- (NSArray *)stickFunctionList
593 NSMutableArray *funcList = [NSMutableArray array];
596 [funcList addObject:[
self makeStickGuiDictHeader:DESC(@"stickmapper-header-propulsion")]];
598 [
self makeStickGuiDict:DESC(@"stickmapper-roll")
601 butfn:STICK_NOFUNCTION]];
603 [
self makeStickGuiDict:DESC(@"stickmapper-pitch")
606 butfn:STICK_NOFUNCTION]];
608 [
self makeStickGuiDict:DESC(@"stickmapper-yaw")
611 butfn:STICK_NOFUNCTION]];
613 [
self makeStickGuiDict:DESC(@"stickmapper-increase-thrust")
614 allowable:HW_AXIS|HW_BUTTON
616 butfn:BUTTON_INCTHRUST]];
618 [
self makeStickGuiDict:DESC(@"stickmapper-decrease-thrust")
619 allowable:HW_AXIS|HW_BUTTON
621 butfn:BUTTON_DECTHRUST]];
623 [
self makeStickGuiDict:DESC(@"stickmapper-fuel-injection")
625 axisfn:STICK_NOFUNCTION
626 butfn:BUTTON_FUELINJECT]];
628 [
self makeStickGuiDict:DESC(@"stickmapper-hyperspeed")
630 axisfn:STICK_NOFUNCTION
631 butfn:BUTTON_HYPERSPEED]];
633 [
self makeStickGuiDict:DESC(@"stickmapper-hyperdrive")
635 axisfn:STICK_NOFUNCTION
636 butfn:BUTTON_HYPERDRIVE]];
638 [
self makeStickGuiDict:DESC(@"stickmapper-gal-hyperdrive")
640 axisfn:STICK_NOFUNCTION
641 butfn:BUTTON_GALACTICDRIVE]];
644 [
self makeStickGuiDict:DESC(@"stickmapper-roll/pitch-precision-toggle")
646 axisfn:STICK_NOFUNCTION
647 butfn:BUTTON_PRECISION]];
650 [funcList addObject:[
self makeStickGuiDictHeader:DESC(@"stickmapper-header-navigation")]];
652 [
self makeStickGuiDict:DESC(@"stickmapper-compass-mode-next")
654 axisfn:STICK_NOFUNCTION
655 butfn:BUTTON_COMPASSMODE]];
657 [
self makeStickGuiDict:DESC(@"stickmapper-compass-mode-prev")
659 axisfn:STICK_NOFUNCTION
660 butfn:BUTTON_COMPASSMODE_PREV]];
662 [
self makeStickGuiDict:DESC(@"stickmapper-scanner-zoom")
664 axisfn:STICK_NOFUNCTION
665 butfn:BUTTON_SCANNERZOOM]];
667 [
self makeStickGuiDict:DESC(@"stickmapper-scanner-unzoom")
669 axisfn:STICK_NOFUNCTION
670 butfn:BUTTON_SCANNERUNZOOM]];
672 [
self makeStickGuiDict:DESC(@"stickmapper-view-forward")
673 allowable:HW_AXIS|HW_BUTTON
675 butfn:BUTTON_VIEWFORWARD]];
677 [
self makeStickGuiDict:DESC(@"stickmapper-view-aft")
678 allowable:HW_AXIS|HW_BUTTON
680 butfn:BUTTON_VIEWAFT]];
682 [
self makeStickGuiDict:DESC(@"stickmapper-view-port")
683 allowable:HW_AXIS|HW_BUTTON
685 butfn:BUTTON_VIEWPORT]];
687 [
self makeStickGuiDict:DESC(@"stickmapper-view-starboard")
688 allowable:HW_AXIS|HW_BUTTON
690 butfn:BUTTON_VIEWSTARBOARD]];
692 [
self makeStickGuiDict:DESC(@"stickmapper-ext-view-cycle")
694 axisfn:STICK_NOFUNCTION
695 butfn:BUTTON_EXTVIEWCYCLE]];
697 [
self makeStickGuiDict:DESC(@"stickmapper-toggle-ID")
699 axisfn:STICK_NOFUNCTION
702 [
self makeStickGuiDict:DESC(@"stickmapper-docking-clearance")
704 axisfn:STICK_NOFUNCTION
705 butfn:BUTTON_DOCKINGCLEARANCE]];
707 [
self makeStickGuiDict:DESC(@"stickmapper-dockcpu")
709 axisfn:STICK_NOFUNCTION
710 butfn:BUTTON_DOCKCPU]];
712 [
self makeStickGuiDict:DESC(@"stickmapper-dockcpufast")
714 axisfn:STICK_NOFUNCTION
715 butfn:BUTTON_DOCKCPUFAST]];
717 [
self makeStickGuiDict:DESC(@"stickmapper-docking-music")
719 axisfn:STICK_NOFUNCTION
720 butfn:BUTTON_DOCKINGMUSIC]];
723 [funcList addObject:[
self makeStickGuiDictHeader:DESC(@"stickmapper-header-offensive")]];
725 [
self makeStickGuiDict:DESC(@"stickmapper-weapons-online-toggle")
727 axisfn:STICK_NOFUNCTION
728 butfn:BUTTON_WEAPONSONLINETOGGLE]];
730 [
self makeStickGuiDict:DESC(@"stickmapper-primary-weapon")
732 axisfn:STICK_NOFUNCTION
735 [
self makeStickGuiDict:DESC(@"stickmapper-secondary-weapon")
737 axisfn:STICK_NOFUNCTION
738 butfn:BUTTON_LAUNCHMISSILE]];
740 [
self makeStickGuiDict:DESC(@"stickmapper-arm-secondary")
742 axisfn:STICK_NOFUNCTION
743 butfn:BUTTON_ARMMISSILE]];
745 [
self makeStickGuiDict:DESC(@"stickmapper-disarm-secondary")
747 axisfn:STICK_NOFUNCTION
748 butfn:BUTTON_UNARM]];
750 [
self makeStickGuiDict:DESC(@"stickmapper-target-nearest-incoming-missile")
752 axisfn:STICK_NOFUNCTION
753 butfn:BUTTON_TARGETINCOMINGMISSILE]];
755 [
self makeStickGuiDict:DESC(@"stickmapper-cycle-secondary")
757 axisfn:STICK_NOFUNCTION
758 butfn:BUTTON_CYCLEMISSILE]];
760 [
self makeStickGuiDict:DESC(@"stickmapper-next-target")
762 axisfn:STICK_NOFUNCTION
763 butfn:BUTTON_NEXTTARGET]];
765 [
self makeStickGuiDict:DESC(@"stickmapper-previous-target")
767 axisfn:STICK_NOFUNCTION
768 butfn:BUTTON_PREVTARGET]];
771 [funcList addObject:[
self makeStickGuiDictHeader:DESC(@"stickmapper-header-defensive")]];
773 [
self makeStickGuiDict:DESC(@"stickmapper-ECM")
775 axisfn:STICK_NOFUNCTION
778 [
self makeStickGuiDict:DESC(@"stickmapper-jettison")
780 axisfn:STICK_NOFUNCTION
781 butfn:BUTTON_JETTISON]];
783 [
self makeStickGuiDict:DESC(@"stickmapper-rotate-cargo")
785 axisfn:STICK_NOFUNCTION
786 butfn:BUTTON_ROTATECARGO]];
788 [
self makeStickGuiDict:DESC(@"stickmapper-escape-pod")
790 axisfn:STICK_NOFUNCTION
791 butfn:BUTTON_ESCAPE]];
794 [funcList addObject:[
self makeStickGuiDictHeader:DESC(@"stickmapper-header-special-equip")]];
796 [
self makeStickGuiDict:DESC(@"stickmapper-mfd-select-next")
798 axisfn:STICK_NOFUNCTION
799 butfn:BUTTON_MFDSELECTNEXT]];
801 [
self makeStickGuiDict:DESC(@"stickmapper-mfd-select-prev")
803 axisfn:STICK_NOFUNCTION
804 butfn:BUTTON_MFDSELECTPREV]];
806 [
self makeStickGuiDict:DESC(@"stickmapper-mfd-cycle-next")
808 axisfn:STICK_NOFUNCTION
809 butfn:BUTTON_MFDCYCLENEXT]];
811 [
self makeStickGuiDict:DESC(@"stickmapper-mfd-cycle-prev")
813 axisfn:STICK_NOFUNCTION
814 butfn:BUTTON_MFDCYCLEPREV]];
816 [
self makeStickGuiDict:DESC(@"stickmapper-prime-equipment")
818 axisfn:STICK_NOFUNCTION
819 butfn:BUTTON_PRIMEEQUIPMENT]];
821 [
self makeStickGuiDict:DESC(@"stickmapper-prime-prev-equipment")
823 axisfn:STICK_NOFUNCTION
824 butfn:BUTTON_PRIMEEQUIPMENT]];
826 [
self makeStickGuiDict:DESC(@"stickmapper-activate-equipment")
828 axisfn:STICK_NOFUNCTION
829 butfn:BUTTON_ACTIVATEEQUIPMENT]];
831 [
self makeStickGuiDict:DESC(@"stickmapper-mode-equipment")
833 axisfn:STICK_NOFUNCTION
834 butfn:BUTTON_MODEEQUIPMENT]];
836 [
self makeStickGuiDict:DESC(@"stickmapper-fastactivate-a")
838 axisfn:STICK_NOFUNCTION
839 butfn:BUTTON_CLOAK]];
841 [
self makeStickGuiDict:DESC(@"stickmapper-fastactivate-b")
843 axisfn:STICK_NOFUNCTION
844 butfn:BUTTON_ENERGYBOMB]];
847 [funcList addObject:[
self makeStickGuiDictHeader:DESC(@"stickmapper-header-misc")]];
849 [
self makeStickGuiDict:DESC(@"stickmapper-snapshot")
851 axisfn:STICK_NOFUNCTION
852 butfn:BUTTON_SNAPSHOT]];
854 [
self makeStickGuiDict:DESC(@"stickmapper-pause")
856 axisfn:STICK_NOFUNCTION
857 butfn:BUTTON_PAUSE]];
859 [
self makeStickGuiDict:DESC(@"stickmapper-toggle-hud")
861 axisfn:STICK_NOFUNCTION
862 butfn:BUTTON_TOGGLEHUD]];
864 [
self makeStickGuiDict:DESC(@"stickmapper-comms-log")
866 axisfn:STICK_NOFUNCTION
867 butfn:BUTTON_COMMSLOG]];
868#if OO_FOV_INFLIGHT_CONTROL_ENABLED
870 [
self makeStickGuiDict:DESC(@"stickmapper-increase-field-of-view")
871 allowable:HW_AXIS|HW_BUTTON
872 axisfn:AXIS_FIELD_OF_VIEW
873 butfn:BUTTON_INC_FIELD_OF_VIEW]];
875 [
self makeStickGuiDict:DESC(@"stickmapper-decrease-field-of-view")
876 allowable:HW_AXIS|HW_BUTTON
877 axisfn:AXIS_FIELD_OF_VIEW
878 butfn:BUTTON_DEC_FIELD_OF_VIEW]];
880 if ([customEquipActivation
count] > 0) {
881 [funcList addObject:[
self makeStickGuiDictHeader:DESC(@"stickmapper-header-oxp-equip")]];
883 for (i = 0; i < [customEquipActivation count]; i++)
886 [
self makeStickGuiDict:[NSString stringWithFormat: @"Activate '%@'", [[customEquipActivation objectAtIndex:i] oo_stringForKey:CUSTOMEQUIP_EQUIPNAME]]
888 axisfn:STICK_NOFUNCTION
891 [
self makeStickGuiDict:[NSString stringWithFormat: @"Mode '%@'", [[customEquipActivation objectAtIndex:i] oo_stringForKey:CUSTOMEQUIP_EQUIPNAME]]
893 axisfn:STICK_NOFUNCTION
903- (NSDictionary *)makeStickGuiDict:(NSString *)what
904 allowable:(
int)allowable
908 NSMutableDictionary *guiDict = [NSMutableDictionary dictionary];
910 if ([what length] > 50) what = [[what substringToIndex:28] stringByAppendingString:
@"..."];
911 [guiDict setObject: what forKey: KEY_GUIDESC];
912 [guiDict setObject: [NSNumber numberWithInt: allowable]
913 forKey: KEY_ALLOWABLE];
915 [guiDict setObject: [NSNumber numberWithInt: axisfn]
918 [guiDict setObject: [NSNumber numberWithInt: butfn]
919 forKey: KEY_BUTTONFN];
923- (NSDictionary *)makeStickGuiDictHeader:(NSString *)header
925 NSMutableDictionary *guiDict = [NSMutableDictionary dictionary];
926 [guiDict setObject:header forKey:KEY_HEADER];
927 [guiDict setObject:@"" forKey:KEY_ALLOWABLE];
928 [guiDict setObject:@"" forKey:KEY_AXISFN];
929 [guiDict setObject:@"" forKey:KEY_BUTTONFN];
CGFloat OOStringWidthInEm(NSString *text)
#define OOLog(class, format,...)
#define GUI_ROW_STICKPROFILE
#define MAX_ROWS_FUNCTIONS
#define GUI_ROW_FUNCSTART
#define CUSTOMEQUIP_BUTTONACTIVATE
#define CUSTOMEQUIP_BUTTONMODE
void resetStickFunctions()
NSArray * stickFunctionList()
BOOL setBackgroundTextureKey:(NSString *key)
BOOL setSelectedRow:(OOGUIRow row)
BOOL setForegroundTextureKey:(NSString *key)
void setText:forRow:align:(NSString *str,[forRow] OOGUIRow row,[align] OOGUIAlignment alignment)
void setSelectableRange:(NSRange range)
void setColor:forRow:(OOColor *color,[forRow] OOGUIRow row)
void setTitle:(NSString *str)
void setTabStops:(OOGUITabSettings stops)
NSString * keyForRow:(OOGUIRow row)
void setArray:forRow:(NSArray *arr,[forRow] OOGUIRow row)
void setKey:forRow:(NSString *str,[forRow] OOGUIRow row)
NSDictionary * buttonFunctions()
void unsetButtonFunction:(int function)
void setFunction:withDict:(int function,[withDict] NSDictionary *stickFn)
NSDictionary * axisFunctions()
void unsetAxisFunction:(int function)
void setCallback:object:hardware:(SEL selector,[object] id obj,[hardware] char hwflags)
typedef int(ZCALLBACK *close_file_func) OF((voidpf opaque