This is XTDemo.m in view mode; [Download] [Up]
#import "XTDemo.h" @implementation XTDemo - init { [super init]; demoAction = [[XTDispatchAction alloc] init]; fieldAction = [[XTDispatchAction alloc] init]; [fieldAction addBindings:"cs'Q=insertKeyCombOfNextKey" estream:nil]; return self; } - appDidInit:sender { id my_font = [Font newFont:"Ohlfs" size:14.0]; demoText = [demoText docView]; [demoText setFont:my_font]; [demoText setInitialAction:demoAction]; [demoText setSel:0 :0]; [[demoText window] makeKeyAndOrderFront:self]; return self; } - windowWillReturnFieldEditor:sender toObject:client { id field_font = [Font newFont:"Ohlfs" size:12.0]; fieldText = [XText newFieldEditorFor:sender initialAction:fieldAction estream:nil]; [fieldText setFont:field_font]; return fieldText; } - applyBinding:sender { [demoAction addBindings: [cmdField stringValue] estream:[demoText errorStream]]; return self; } - insertKey:sender { [fieldText setSel:0 :0]; [fieldText insertKeyCombOfNextKey]; return self; } - clearBindings:sender { id newAction; /* if anyone thinks this will cause a memory leak, let me know P.G. */ newAction = [[XTDispatchAction alloc] init]; [demoText setInitialAction:newAction]; [demoAction free]; demoAction = newAction; return self; } - openFile:sender { const char *file; char path[MAXPATHLEN +1]; id openPanel; [[NXBundle mainBundle] getPath:path forResource:"KeyBindingFiles" ofType:""]; openPanel = [[[OpenPanel new] allowMultipleFiles:NO] setTitle:"Keybinding File"]; /* run the open panel */ if ([openPanel runModalForDirectory:path file:""]){ /* open the file returned by the save panel */ file = [openPanel filename]; strcpy(fullName, file); [loadButton setEnabled:YES]; sprintf(titleString, "Keybinding File: %s", *[openPanel filenames]); [[demoText window] setTitle:titleString]; /* open file from the workspace-->default editor) */ [[Application workspace] openFile:file]; } return self; } - saveBinding:sender { FILE *fp; const char *file; id savePanel; if(![loadButton isEnabled]) { savePanel = [[SavePanel new] setTitle:"Keybinding File"]; if ([savePanel runModal]) { /* use the file returned by the save panel */ file = [savePanel filename]; strcpy(fullName, file); sprintf(titleString, "Keybinding File: %s", [savePanel filename]); [[demoText window] setTitle:titleString]; [loadButton setEnabled:YES]; } else return self; } fp = fopen(fullName, "a+"); /* append */ if(!fp){ NXRunAlertPanel("Save Binding","Can't Append to %s", "Okay", NULL, NULL, fullName); return self; } /* write the comment (rather primitively)*/ fprintf(fp,"%s","#"); fprintf(fp,"%s",[comField stringValue]); fprintf(fp,"\n"); /* write the binding */ fprintf(fp,"%s",[cmdField stringValue]); fprintf(fp,"\n"); fclose(fp); return self; } - loadBindings:sender { [demoAction loadFromFile:fullName estream:nil]; return self; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.