This is PopUpScrollView.m in view mode; [Download] [Up]
/* * Copyright (C) 1993 Robert Davis * * This program is free software; you can redistribute it and/or * modify it under the terms of Version 2, or any later version, of * the GNU General Public License as published by the Free Software * Foundation. */ static char RCSId[]="$Id: PopUpScrollView.m,v 1.3 1993/05/04 16:22:36 davis Exp $"; #import <appkit/Matrix.h> #import <appkit/PopUpList.h> #import <objc/List.h> #import "PopUpScrollView.h" #import "PlotView.h" #define UNDEFINED -1.0 /* See [Control selectedTag] */ #define DEFAULTTAG 100 /* Default tag upon init is 100 */ @implementation PopUpScrollView - initFrame:(const NXRect *)frameRect { [super initFrame:frameRect]; oldTag = UNDEFINED; return self; } - free { /* * A pop-up button's target is a PopUpList that won't be freed * when the popUpButton is freed. So we must free it here. */ [[popUpButton target] free]; return [super free]; } - changeScale:sender { int theTag = [sender selectedTag]; if (theTag != oldTag) { oldTag = theTag; return [self setCurrentTag: theTag]; } else return nil; } /* 1.00 scaleFactor == 100% */ - changeScaleTo:(float)scaleFactor { [[self docView] scale:scaleFactor]; return self; } - tile { NXRect scrollerRect, buttonRect; [super tile]; if ([popUpButton superview] != self) { [self addSubview:popUpButton]; } /* * Now make the hScroller smaller and stick the popUpButton next * to it. */ [hScroller getFrame:&scrollerRect]; NXDivideRect(&scrollerRect, &buttonRect, 90.0, 2); [hScroller setFrame:&scrollerRect]; [popUpButton setFrame:&buttonRect]; return self; } - update { [self setCurrentTag:[self currentTag]]; return self; } - setCurrentTag:(int)aTag { int i, count; id cell, cells; id value = nil; cell = [[popUpButton target] findCellWithTag:aTag]; /* * Check to make sure the tag is a valid selection (i.e. that it * is in the PopUpList. If not, we don't do anything. (Note * that we do not add aTag to the list.) */ cells = [[[popUpButton target] itemList] cellList]; count = [cells count]; for(i = 0; i < count; i++) { if ([cells objectAt:i] == cell) { [popUpButton setTitle: [cell title]]; value = self; [self changeScaleTo: [cell tag] / 100.0]; oldTag = aTag; break; } } return value; } - (int)currentTag { int aTag; aTag = [[[popUpButton target] itemList] selectedTag]; if (aTag != UNDEFINED) return aTag; else return DEFAULTTAG; } // Shuts up the compiler about unused RCSId - (const char *) rcsid { return RCSId; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.