All Data Structures Files Functions Variables Enumerations Enumerator Properties Defines
/Projects/Cogito/src/Objects/SlideViewer.m
Go to the documentation of this file.
00001 //
00002 //  SlideViewer.m
00003 //  Author: Thomas Taylor
00004 //
00005 //  A viewer for Slide objects
00006 //  with navigation
00007 //
00008 //  07/03/2012: Created class
00009 //
00010 
00011 #import "SlideViewer.h"
00012 
00013 @interface SlideViewer()
00014 
00015 -(void)initSlides;
00016 -(void)initNavButtons;
00017 -(void)onPreviousNavButtonPressed;
00018 -(void)onNextNavButtonPressed;
00019 -(void)updateNavButtons;
00020 
00021 @end
00022 
00023 @implementation SlideViewer
00024 
00025 #pragma mark -
00026 #pragma mark Memory Allocation
00027 
00031 -(void)dealloc
00032 {    
00033     [slides release];
00034     [super dealloc];
00035 }
00036 
00037 #pragma mark -
00038 #pragma mark Initialisation
00039 
00044 -(id)initWithSlides:(CCArray*)_slides
00045 {    
00046     self = [super init];
00047     
00048     if (self != nil) 
00049     {        
00050         slides = [[CCArray alloc] initWithArray:_slides];
00051         slideNumber = 0;
00052         
00053         CGSize winSize = [CCDirector sharedDirector].winSize; 
00054         centrePosition = ccp(winSize.width/2, winSize.height/2);
00055         leftPosition = ccp(0-winSize.width/2, winSize.height/2);
00056         rightPosition = ccp(winSize.width*1.5, winSize.height/2);
00057         slideAnimationDuration = 0.75f;
00058         
00059         [self initSlides];
00060         [self initNavButtons];
00061         [self updateNavButtons];
00062     }
00063     return self;
00064 }
00065 
00066 #pragma mark -
00067 
00071 -(void)initSlides
00072 {
00073     for (int i = 0; i < [slides count]; i++)
00074     {
00075         Slide* slide = [slides objectAtIndex:i];
00076         [self addChild:slide];
00077         [slide update];
00078         
00079         if(i == 0) 
00080         {
00081             currentSlide = slide;
00082             slide.position = centrePosition;
00083         }
00084         else slide.position = rightPosition;
00085     }
00086 }
00087 
00091 -(void)initNavButtons
00092 {
00093     CGSize winSize = [CCDirector sharedDirector].winSize;
00094     
00095     //create the buttons
00096     previousButton = [CCMenuItemImage itemFromNormalImage:@"Previous.png" selectedImage:@"Previous_down.png" disabledImage:nil target:self selector:@selector(onPreviousNavButtonPressed)];
00097     nextButton = [CCMenuItemImage itemFromNormalImage:@"Next.png" selectedImage:@"Next_down.png" disabledImage:nil target:self selector:@selector(onNextNavButtonPressed)];
00098     
00099     // create menu with the items
00100     navButtons = [CCMenu menuWithItems:previousButton, nextButton, nil];
00101     
00102     // position the menu
00103     [nextButton setPosition:ccp(nextButton.position.x+420, nextButton.position.y)];
00104     [navButtons setPosition: ccp(30, winSize.height/2)];
00105     
00106     // add the menu
00107     [self addChild:navButtons];
00108 }
00109 
00110 #pragma mark -
00111 #pragma mark Event Handling
00112 
00116 -(void)onPreviousNavButtonPressed 
00117 {    
00118     if([currentSlide numberOfRunningActions] > 0) return;
00119     
00120  slideNumber--;
00121     
00122     // animate out
00123     id animateOutAction = [CCMoveTo actionWithDuration:slideAnimationDuration position:rightPosition];
00124     [currentSlide runAction:animateOutAction];
00125     
00126     currentSlide = [slides objectAtIndex:slideNumber];
00127     
00128     // animate in
00129     id animateInAction = [CCMoveTo actionWithDuration:slideAnimationDuration position:centrePosition];
00130     [currentSlide runAction:animateInAction];
00131     
00132     [self updateNavButtons];
00133 }
00134 
00138 -(void)onNextNavButtonPressed 
00139 {        
00140     if([currentSlide numberOfRunningActions] > 0) return;
00141     
00142  slideNumber++;
00143     
00144     // animate out
00145     id animateOutAction = [CCMoveTo actionWithDuration:slideAnimationDuration position:leftPosition];
00146     [currentSlide runAction:animateOutAction];
00147     
00148     currentSlide = [slides objectAtIndex:slideNumber];
00149     
00150     // animate in
00151     id animateInAction = [CCMoveTo actionWithDuration:slideAnimationDuration position:centrePosition];
00152     [currentSlide runAction:animateInAction];
00153     
00154     [self updateNavButtons];
00155 }
00156 
00157 -(void)updateNavButtons
00158 {
00159     int disabledOpacity = 50;
00160     
00161     // enable/disable the previous button as appropriate
00162     BOOL previousEnabled = (slideNumber > 0) ? YES : NO;
00163     [previousButton setIsEnabled:previousEnabled];
00164     [previousButton setOpacity:(previousEnabled) ? 255 : disabledOpacity];
00165     
00166     // enable/disable the next button as appropriate
00167     BOOL nextEnabled = (slideNumber < [slides count]-1) ? YES : NO;
00168     [nextButton setIsEnabled:nextEnabled];
00169     [nextButton setOpacity:(nextEnabled) ? 255 : disabledOpacity];
00170 }
00171 
00172 @end