This is Preferences.m in view mode; [Download] [Up]
//***************************************************************************** // // Preferences.m. // // Preferences logic. // // by Felipe A. Rodriguez // // This code is supplied "as is" the author makes no warranty as to its // suitability for any purpose. This code is free and may be distributed // in accordance with the terms of the: // // GNU GENERAL PUBLIC LICENSE // Version 2, June 1991 // copyright (C) 1989, 1991 Free Software Foundation, Inc. // 675 Mass Ave, Cambridge, MA 02139, USA // //***************************************************************************** #import "Preferences.h" #import "PreferencesPanelController.h" #import "SwapView.h" #import <sys/types.h> #import <sys/dir.h> @implementation Preferences //***************************************************************************** // // sent to us after nib objects are unarchived and init'd // //***************************************************************************** - awakeFromNib { NXSize cSize; // size of scroll's doc view NXRect mRect; // sizeof scroll's content view cSize.width = cSize.height = 60.0; // remem loc/size [[swapView window] setFrameAutosaveName:[[swapView window] title]]; // adjust button preference scrollview's behaviour [prefScrollView setBorderType: NX_BEZEL]; [prefScrollView setHorizScrollerRequired:YES]; [prefScrollView setVertScrollerRequired:NO]; [prefScrollView setLineScroll:2]; [prefScrollView getVisibleRect:&mRect]; bView = [[Matrix alloc] initFrame:&mRect]; [bView setMode:NX_RADIOMODE]; [bView setPrototype:[[[[ButtonCell alloc] initIconCell:"app"] setType:NX_PUSHONPUSHOFF] setTarget:self]]; [bView setCellSize:&cSize]; [bView addRow]; [prefScrollView setDocView:bView]; return self; } //***************************************************************************** // // swap preferences subviews, dynamically loads it if necessary // //***************************************************************************** - loadPreference:(const char *)pControl ofClass:aClass buttonMatrix:sender { id iPanelController; if(!NXGetNamedObject(pControl, NXApp)) { if(![[NXBundle bundleForClass:aClass] getPath:Path forResource:pControl ofType:"nib"]) NXRunAlertPanel(0, "Error getting nib path", 0, 0, 0); else [NXApp loadNibFile:Path owner:NXApp withNames:YES fromZone:[self zone]]; if(!(iPanelController = NXGetNamedObject(pControl, NXApp))) NXRunAlertPanel(0, "Error getting named object", 0, 0, 0); [swapView addInspector:[iPanelController inspectorPanel] for:sender]; } [swapView inspectorFor:sender]; [[swapView window] makeKeyAndOrderFront:self]; return self; } //***************************************************************************** // // adjust the size of the scroll view as button cells are added // //***************************************************************************** - resizeScrollViewFor:(int)numberOfButtons { NXRect fRect; // scroll's frame rect NXSize sSize; // size of scroll's doc view NXCoord newWidth; // get coordinates for selection button [prefScrollView getFrame:&fRect]; [prefScrollView getContentSize:&sSize]; fRect.size.width = 60.0; // move x origin right as buttons are added fRect.origin.x = (NXCoord)(fRect.size.width * numberOfButtons); // if origin of new button plus its width // exceeds the scroll's docView width // resize the scroll's docView newWidth = fRect.origin.x + fRect.size.width + 4.0; if(newWidth > sSize.width) [[prefScrollView docView] sizeTo:newWidth :sSize.height]; return self; } //***************************************************************************** // // add an inpector and it's trigger button to the preferences panel // //***************************************************************************** - addInspector:(const char *)aName atPosition:(int)pos withSelector:(SEL)aSel { NXImage *image; // find selector button image strncpy(Path, [[NXBundle mainBundle] directory] , MAXPATHLEN); strncat(Path, "/", MAXPATHLEN - strlen(Path)); strncat(Path, aName, MAXPATHLEN - strlen(Path)); strncat(Path, ".gkPreference/icon.tiff", MAXPATHLEN - strlen(Path)); image = [[NXImage alloc] initFromFile:Path]; if(![image lockFocus]) // chk for valid image image = [NXImage findImageNamed:"app"]; // add a selector button for this inspector if([bView cellCount] <= pos) { [bView insertColAt:pos]; [self resizeScrollViewFor:pos]; } [[[[[bView cellAt:0 :pos] setImage:image] setTag:pos] setTarget:self] setAction:aSel]; [bView display]; return self; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.