This is IdleAnimator.m in view mode; [Download] [Up]
//***************************************************************************** // // IdleAnimator.h. // // Controls Idle panel animation // // 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 "IdleAnimator.h" #import "CommandScroll.h" #import "Coordinator.h" #import "SpaceView.h" @interface IdleAnimator (Private) static void IdleAnimate(); // called by timed entry events static DPSTimedEntry aniTimeTag; @end @implementation IdleAnimator //***************************************************************************** // // designated initializer // //***************************************************************************** - awakeFromNib { imageList = [[List alloc] init]; // produce an array of image objects [imageList insertObject: [NXImage findImageNamed: "nomail"] at: 0]; [imageList insertObject: [NXImage findImageNamed: "newmail1"] at: 1]; [imageList insertObject: [NXImage findImageNamed: "newmail2"] at: 2]; return self; } //***************************************************************************** // // cancel target -- do not end ppp session // //***************************************************************************** - cancel:sender { return [[NXApp delegate] idleFinished]; } //***************************************************************************** // // continue target -- end ppp session // //***************************************************************************** - continue:sender { if([[[NXApp mainMenu] findCellWithTag:1] isEnabled]) // if ppp is up { [[[NXApp delegate] commandView] appendString: [[NXApp delegate] localString: "Dropping ppp Link due to idle timeout\n"]]; [[NXApp delegate] disconnect:self]; } return [[NXApp delegate] idleFinished]; } //***************************************************************************** // // cleanup prior to zone destruction // //***************************************************************************** - cleanUp { [self removeTimedEntry]; [ITPanel close]; if(wasHidden) // if app was hidden [NXApp perform:@selector(hide:) with:[NXApp delegate] afterDelay:500 cancelPrevious:YES]; return self; } //***************************************************************************** // // countdown to idle timeout // //***************************************************************************** - countdown { int seconds; static time_t ltime; // time in seconds static time_t preltime; // previous time in seconds time(<ime); // Get time and place in time_t if(ltime > preltime) { if((seconds = [secTillTimeoutField intValue]) == 0) [self continue:self]; else { [secTillTimeoutField setIntValue:(seconds - 1)]; [secTillTimeoutField display]; } preltime = ltime; } return self; } //***************************************************************************** // // set animation into motion // //***************************************************************************** - startAnimTimer { wasHidden = [NXApp isHidden]; // app hidden? if(strcmp(NXGetDefaultValue([NXApp appName],"sound"), "YES") == 0) [[[Sound findSoundFor: "Gong"] play: nil] free]; if([[NXApp delegate] mailInQueue]) mailIcon = YES; if(!aniTimeTag) aniTimeTag = DPSAddTimedEntry( // register function Animate 0.08, // to be called every period of (DPSTimedEntryProc)IdleAnimate, // arg0 (id)self, NX_BASETHRESHOLD); [ITPanel center]; [ITPanel makeKeyAndOrderFront:self]; [NXApp perform:@selector(unhide:) with:self // unhide afterDelay:500 cancelPrevious:YES]; return self; } //***************************************************************************** // // icon animation // //***************************************************************************** - _animate { static int Index = 0, divCntr = 0; static BOOL reverse = NO; [self countdown]; [sView display]; if(mailIcon && divCntr++ == 3) { divCntr = 0; // slow mail animation down by 1/3 [mailView setImage:[imageList objectAt:Index]]; if(Index >= 2) // reverse anim seq reverse = YES; if(Index <= 0) // reverse anim seq reverse = NO; if(reverse) Index--; else Index++; } return self; } //***************************************************************************** // // remove the timed entry // //***************************************************************************** - removeTimedEntry { if(aniTimeTag) DPSRemoveTimedEntry(aniTimeTag); aniTimeTag = 0; return self; } //***************************************************************************** // // free // //***************************************************************************** - free { NXPing(); NXDestroyZone([self zone]); return self; } @end @implementation IdleAnimator (Private) //***************************************************************************** // // This fucntion is registered by DPSaddtimedentry. // It is subsequently called every period t as registered // in arg 0 of DPSaddtimedentry. // //***************************************************************************** static void IdleAnimate(DPSTimedEntry time_tag, double now, id self) { [self _animate]; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.