#import "ButtonBarView.h" @implementation IWebCams static IWebCams *sharedInstance; + (IWebCams *)sharedInstance { if (!sharedInstance) { sharedInstance = [[IWebCams alloc] init]; //NSLog(@"sharedInstance: creating new inst"); } //NSLog(@"returning sharedinst"); return sharedInstance; } /* - (void)deviceOrientationChanged:(struct __GSEvent *)fp8 { NSLog(@"Orientation change"); int orientation = [UIHardware deviceOrientation: YES]; NSLog(@"Orientation: %d", orientation); [buttonBarView setTransform:CGAffineTransformIdentity]; float angle = 90.0 * orientation; [buttonBarView setRotationBy:angle]; [super deviceOrientationChanged:fp8]; } */ - (void) applicationDidFinishLaunching:(NSNotification *)aNotification { sharedInstance = self; struct CGRect frame = [UIHardware fullScreenApplicationContentRect]; frame.origin.x = frame.origin.y = 0.0f; mainWindow = [[UIWindow alloc] initWithContentRect: frame]; // The "master" view that contains other views buttonBarView = [[ButtonBarView alloc] initWithFrame:frame]; [super setStatusBarMode:0 duration:0]; [mainWindow orderFront: self]; [mainWindow makeKey: self]; [mainWindow _setHidden: NO]; [mainWindow setContentView: buttonBarView]; [buttonBarView release]; } @end @implementation ButtonBarView -(id)initWithFrame:(CGRect)frame { if ((self == [super initWithFrame:frame])!=nil) { barStatus = 1; _offScreenRect = frame; _onScreenRect = frame; _onScreenRect.origin.x = 0.0f; rect = [UIHardware fullScreenApplicationContentRect]; rect.origin.x = rect.origin.y = 0.0f; rect.size.height = rect.size.height-40.0f; // Create some colors float black[4] = {0, 0, 0, 0}; // Create your views locationsView = [ [ LocationsView alloc ] initWithFrame: rect app:self]; locationsItemView = [[LocationsItemView alloc] initWithFrame:CGRectMake(rect.origin.x, rect.origin.x, rect.size.width, rect.size.height+40.0f) app:self]; aboutView = [ [ AboutView alloc ] initWithFrame:rect ]; showView = [ [ ShowView alloc ] initWithFrame: rect app:self row:0]; [locationsView setBackgroundColor: CGColorCreate(CGColorSpaceCreateDeviceRGB(), black)]; [locationsItemView setBackgroundColor: CGColorCreate(CGColorSpaceCreateDeviceRGB(), black)]; [aboutView setBackgroundColor: CGColorCreate(CGColorSpaceCreateDeviceRGB(), black)]; [showView setBackgroundColor: CGColorCreate(CGColorSpaceCreateDeviceRGB(), black)]; // Locations Page [locationsView setDelegate:self]; // About Page [aboutView setDelegate:self]; // Show Page [showView setDelegate:self]; // _transitionView is used for handling transitions of the views only // _barTransitionView is used to handle the button bars transitioning _transitionView = [ self createTransitionView ]; _barTransitionView = [ self createBarTransitionView ]; _buttonBar = [ self createButtonBar ]; [ self addSubview: _transitionView ]; [ self addSubview: _barTransitionView ]; [ _transitionView transition:6 toView:showView ]; [ _barTransitionView transition:6 toView:_buttonBar ]; } return self; } -(void)fillTable { NSLog(@"buttonBarView fillTable"); [locationList release]; locationList = [[NSMutableArray alloc] init]; [urlList release]; urlList = [[NSMutableArray alloc] init]; [imageList release]; imageList = [[NSMutableArray alloc] init]; NSDictionary *locationDict = [NSDictionary dictionaryWithContentsOfFile: @"/Applications/iWebCams.app/locations.plist"]; int locationCount = [[locationDict allKeys] count]; int i; NSString *currentName = nil; NSString *currentURL = nil; id currentItem = nil; NSString *currentKey = nil; for (i = 0; i < locationCount; i++) { currentKey = [[locationDict allKeys] objectAtIndex:i]; currentItem = [locationDict valueForKey:currentKey]; currentName = [currentItem valueForKey:@"name"]; currentURL = [currentItem valueForKey:@"url"]; [locationList addObject:currentName]; [urlList addObject:currentURL]; NSData *imageData = [[NSData dataWithContentsOfURL:[NSURL URLWithString:currentURL]] retain]; [imageList addObject:imageData]; } NSLog(@"Dict: %@", locationDict); NSLog(@"Locations: %@", locationList); NSLog(@"URLs: %@", urlList); } -(void)storeData { NSLog(@"Store changed data"); NSString *error; int locationCount = [locationList count]; NSMutableDictionary *locationDict = [[[NSMutableDictionary alloc] initWithCapacity: locationCount] autorelease]; int i; for (i = 0; i < locationCount; i++) { NSLog(@"loop %d",i); NSDictionary *elementDict = [NSDictionary dictionaryWithObjectsAndKeys: [locationList objectAtIndex:i], @"name", [urlList objectAtIndex:i], @"url", nil ]; [locationDict setObject: elementDict forKey:[NSString stringWithFormat:@"%d", i]]; } NSLog(@"New Dictionary: %@", locationDict); //Seralize settings dictionary NSData *rawPList = [NSPropertyListSerialization dataFromPropertyList: locationDict format: NSPropertyListXMLFormat_v1_0 errorDescription: &error]; //Write settings plist file [rawPList writeToFile: [@"/Applications/iWebCams.app/locations.plist" retain] atomically: YES]; [locationsView reloadData]; [showView reloadData:0]; } - (NSMutableArray *)getLocationList { return locationList; } - (NSMutableArray *)getURLList { return urlList; } - (NSMutableArray *)getImageList { return imageList; } - (void)changeLocation:(int)row name:(NSString *)name url:(NSString *)url { NSData *imageData = [[NSData dataWithContentsOfURL:[NSURL URLWithString:url]] retain]; if (row == -1) { [locationList addObject:name]; [urlList addObject:url]; [imageList addObject:imageData]; } else { [locationList replaceObjectAtIndex:row withObject:name]; [urlList replaceObjectAtIndex:row withObject:url]; [imageList replaceObjectAtIndex:row withObject:imageData]; } [self storeData]; } - (void)removeLocation:(int)row { [locationList removeObjectAtIndex:row]; [urlList removeObjectAtIndex:row]; [imageList removeObjectAtIndex:row]; [self storeData]; } - (void)swapLocations:(int)row toRow:(int)toRow { int i; if (rowtoRow) { for (i = row; i > toRow; i--) { [locationList exchangeObjectAtIndex: i withObjectAtIndex: i-1]; [urlList exchangeObjectAtIndex: i withObjectAtIndex: i-1]; [imageList exchangeObjectAtIndex: i withObjectAtIndex: i-1]; } } [self storeData]; } ////////////// Transitions //////////////// - (void)transToLocationsItemView:(int)row { [locationsItemView setItem:(row)]; currentView = CB_9; [ _barTransitionView transition:5 fromView:_buttonBar toView:blankView ]; [_transitionView transition:1 fromView:locationsView toView:locationsItemView]; barStatus = 0; } - (void)transToLocationsView { currentView = CB_2; [_transitionView transition:2 fromView:locationsItemView toView:locationsView]; [ _barTransitionView transition:3 fromView:blankView toView:_buttonBar]; barStatus = 1; } - (UITransitionView *)createTransitionView { UITransitionView *transitionView = [ [ UITransitionView alloc ] initWithFrame:CGRectMake(0,0,320,460)]; return transitionView; } - (UITransitionView *)createBarTransitionView { struct CGRect buttonBarRect = [UIHardware fullScreenApplicationContentRect]; buttonBarRect.origin.x = 0.0f; buttonBarRect.origin.y = buttonBarRect.size.height-49.0f; buttonBarRect.size.height = 49.0f; UITransitionView *transitionBarView = [ [ UITransitionView alloc ] initWithFrame:buttonBarRect]; // Create empty(blank) view for to transition the button bar to blankView = [ [ UIView alloc ] initWithFrame:buttonBarRect]; return transitionBarView; } - (UIButtonBar *)createButtonBar { struct CGRect buttonBarRect = [UIHardware fullScreenApplicationContentRect]; buttonBarRect.origin.x = buttonBarRect.origin.y = 0.0f; buttonBarRect.size.height = 49.0f; UIButtonBar *buttonBar; buttonBar = [ [ UIButtonBar alloc ] initInView: self withFrame: buttonBarRect withItemList: [ self buttonBarItems ] ]; [buttonBar setDelegate:self]; [buttonBar setBarStyle:1]; [buttonBar setButtonBarTrackingMode: 2]; int buttons[3] = { 1, 2, 3}; [buttonBar registerButtonGroup:0 withButtons:buttons withCount: 3]; [buttonBar showButtonGroup: 0 withDuration: 0.0f]; int tag; for(tag = 1; tag < 3; tag++) { [ [ buttonBar viewWithTag:tag ] setFrame:CGRectMake(2.0f + ((tag - 1) * 106.0f), 1.0f, 106.0f, 48.0f) ]; } [ buttonBar showSelectionForButton: 1]; return buttonBar; } - (NSArray *)buttonBarItems { return [ NSArray arrayWithObjects: [ NSDictionary dictionaryWithObjectsAndKeys: @"buttonBarItemTapped:", kUIButtonBarButtonAction, @"buttonShowOn.png", kUIButtonBarButtonInfo, @"buttonShowOff.png", kUIButtonBarButtonSelectedInfo, [ NSNumber numberWithInt: 1], kUIButtonBarButtonTag, self, kUIButtonBarButtonTarget, @"Show", kUIButtonBarButtonTitle, @"0", kUIButtonBarButtonType, nil ], [ NSDictionary dictionaryWithObjectsAndKeys: @"buttonBarItemTapped:", kUIButtonBarButtonAction, @"buttonSettingsOn.png", kUIButtonBarButtonInfo, @"buttonSettingsOff.png", kUIButtonBarButtonSelectedInfo, [ NSNumber numberWithInt: 2], kUIButtonBarButtonTag, self, kUIButtonBarButtonTarget, @"Locations", kUIButtonBarButtonTitle, @"0", kUIButtonBarButtonType, nil ], [ NSDictionary dictionaryWithObjectsAndKeys: @"buttonBarItemTapped:", kUIButtonBarButtonAction, @"buttonInfoOn.png", kUIButtonBarButtonInfo, @"buttonInfoOff.png", kUIButtonBarButtonSelectedInfo, [ NSNumber numberWithInt: 3], kUIButtonBarButtonTag, self, kUIButtonBarButtonTarget, @"About", kUIButtonBarButtonTitle, @"0", kUIButtonBarButtonType, nil ], nil ]; } - (void)buttonBarItemTapped:(id) sender { int button = [ sender tag ]; switch (button) { case 1: if (currentView == CB_1) { } else { [self testAnimation:@"fromRight"]; [ _transitionView transition:0 toView:showView ]; currentView = CB_1; } break; case 2: if (currentView == CB_2) { } else { if (currentView == CB_1) { [self testAnimation:@"fromLeft"]; } else { [self testAnimation:@"fromRight"]; } [ _transitionView transition:0 toView:locationsView ]; currentView = CB_2; } break; case 3: if (currentView == CB_3) { } else { [self testAnimation:@"fromLeft"]; [ _transitionView transition:0 toView:aboutView ]; currentView = CB_3; } break; } } - (void)reloadButtonBar { [ _buttonBar removeFromSuperview ]; [ _buttonBar release ]; _buttonBar = [ self createButtonBar ]; } /* // Gets a mouse down event in the rect, but you can use it to catch mouse event in any rect you want - (void)mouseDown:(GSEvent *)event { NSLog(@"%s", _cmd); CGPoint point = GSEventGetLocationInWindow(event); if (CGRectContainsPoint(rect, point)) { if (!barStatus) { [ _barTransitionView transition:3 fromView:blankView toView:_buttonBar]; barStatus = 1; } else { [ _barTransitionView transition:5 fromView:_buttonBar toView:blankView ]; barStatus = 0; } } } */ // Sample layerkit animation -(void)testAnimation:(NSString *)direction { LKAnimation *animation = [LKTransition animation]; [animation setType: @"oglFlip"]; [animation setTimingFunction: [LKTimingFunction functionWithName: @"easeInEaseOut"]]; [animation setFillMode: @"extended"]; [animation setTransitionFlags: 3]; [animation setDuration: 10]; [animation setSpeed:0.35]; [animation setSubtype: direction]; [[self _layer] addAnimation: animation forKey: 0]; } @end