Statistics
| Branch: | Tag: | Revision:

root / Classes / ImageFamilyPickerCell.m @ 700184fb

History | View | Annotate | Download (6.8 kB)

1 700184fb Miltiadis Vasilakis
//
2 700184fb Miltiadis Vasilakis
//  ImageFamilyPickerCell.m
3 700184fb Miltiadis Vasilakis
//  OpenStack
4 700184fb Miltiadis Vasilakis
//
5 700184fb Miltiadis Vasilakis
//  Created by Mike Mayo on 10/23/10.
6 700184fb Miltiadis Vasilakis
//  The OpenStack project is provided under the Apache 2.0 license.
7 700184fb Miltiadis Vasilakis
//
8 700184fb Miltiadis Vasilakis
9 700184fb Miltiadis Vasilakis
#import "ImageFamilyPickerCell.h"
10 700184fb Miltiadis Vasilakis
#import "OpenStackAccount.h"
11 700184fb Miltiadis Vasilakis
#import "Image.h"
12 700184fb Miltiadis Vasilakis
13 700184fb Miltiadis Vasilakis
#define kScaleY 1.53061224
14 700184fb Miltiadis Vasilakis
#define kScaleX .29109589
15 700184fb Miltiadis Vasilakis
#define kPickerX -4.0
16 700184fb Miltiadis Vasilakis
#define kPickerY -86.0
17 700184fb Miltiadis Vasilakis
18 700184fb Miltiadis Vasilakis
#define kImageFamily 3
19 700184fb Miltiadis Vasilakis
#define kImages 4
20 700184fb Miltiadis Vasilakis
21 700184fb Miltiadis Vasilakis
@implementation ImageFamilyPickerCell
22 700184fb Miltiadis Vasilakis
23 700184fb Miltiadis Vasilakis
@synthesize account, tableView, images, selectedFamily;
24 700184fb Miltiadis Vasilakis
25 700184fb Miltiadis Vasilakis
- (void)groupImages {
26 700184fb Miltiadis Vasilakis
    NSMutableDictionary *dict = [[NSMutableDictionary alloc] initWithCapacity:9];
27 700184fb Miltiadis Vasilakis
    NSArray *stringKeys = [NSArray arrayWithObjects:@"ubuntu", @"redhat", @"gentoo", @"centos", @"debian", @"windows", @"arch", kCustomImage, @"fedora", nil];
28 700184fb Miltiadis Vasilakis
    
29 700184fb Miltiadis Vasilakis
    for (int i = 0; i < [stringKeys count]; i++) {
30 700184fb Miltiadis Vasilakis
        NSString *stringKey = [stringKeys objectAtIndex:i];
31 700184fb Miltiadis Vasilakis
        NSArray *keys = [self.account.images allKeys];
32 700184fb Miltiadis Vasilakis
        for (int j = 0; j < [keys count]; j++) {
33 700184fb Miltiadis Vasilakis
            Image *image = [self.account.images objectForKey:[keys objectAtIndex:j]];
34 700184fb Miltiadis Vasilakis
            if ([image respondsToSelector:@selector(logoPrefix)] && [[image logoPrefix] isEqualToString:stringKey]) {
35 700184fb Miltiadis Vasilakis
                if (![dict objectForKey:stringKey]) {
36 700184fb Miltiadis Vasilakis
                    [dict setObject:[[[NSMutableArray alloc] init] autorelease] forKey:stringKey];
37 700184fb Miltiadis Vasilakis
                }
38 700184fb Miltiadis Vasilakis
                NSMutableArray *keyedImages = [dict objectForKey:stringKey];
39 700184fb Miltiadis Vasilakis
                [keyedImages addObject:image];
40 700184fb Miltiadis Vasilakis
            }
41 700184fb Miltiadis Vasilakis
        }
42 700184fb Miltiadis Vasilakis
    }
43 700184fb Miltiadis Vasilakis
    
44 700184fb Miltiadis Vasilakis
    images = [[NSDictionary alloc] initWithDictionary:dict];
45 700184fb Miltiadis Vasilakis
    [dict release];
46 700184fb Miltiadis Vasilakis
}
47 700184fb Miltiadis Vasilakis
48 700184fb Miltiadis Vasilakis
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier account:(OpenStackAccount *)openStackAccount tableView:(UITableView *)aTableView {
49 700184fb Miltiadis Vasilakis
    if ((self = [super initWithStyle:style reuseIdentifier:reuseIdentifier])) {
50 700184fb Miltiadis Vasilakis
        // Initialization code
51 700184fb Miltiadis Vasilakis
        
52 700184fb Miltiadis Vasilakis
        self.account = openStackAccount;
53 700184fb Miltiadis Vasilakis
        self.tableView = aTableView;
54 700184fb Miltiadis Vasilakis
        selectedFamily = @"ubuntu";
55 700184fb Miltiadis Vasilakis
        [self groupImages];
56 700184fb Miltiadis Vasilakis
        
57 700184fb Miltiadis Vasilakis
        
58 700184fb Miltiadis Vasilakis
        UIPickerView *picker = [[UIPickerView alloc] initWithFrame:CGRectMake(kPickerX, kPickerY, 320.0, 320.0)];
59 700184fb Miltiadis Vasilakis
        picker.delegate = self;
60 700184fb Miltiadis Vasilakis
        picker.dataSource = self;
61 700184fb Miltiadis Vasilakis
        picker.showsSelectionIndicator = NO;
62 700184fb Miltiadis Vasilakis
        
63 700184fb Miltiadis Vasilakis
        //Resize the picker, rotate it so that it is horizontal and set its position
64 700184fb Miltiadis Vasilakis
        CGAffineTransform rotate = picker.transform;
65 700184fb Miltiadis Vasilakis
        rotate = CGAffineTransformRotate(rotate, 4.71238898);
66 700184fb Miltiadis Vasilakis
        rotate = CGAffineTransformScale(rotate, kScaleX, kScaleY);
67 700184fb Miltiadis Vasilakis
        CGAffineTransform t0 = CGAffineTransformMakeTranslation(3, 22.5);
68 700184fb Miltiadis Vasilakis
        picker.transform = CGAffineTransformConcat(rotate,t0);
69 700184fb Miltiadis Vasilakis
        [self addSubview:picker];
70 700184fb Miltiadis Vasilakis
        
71 700184fb Miltiadis Vasilakis
        // place a mask over the picker to hide the dark outlined area
72 700184fb Miltiadis Vasilakis
        UIImageView *mask = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image_picker_mask.png"]];
73 700184fb Miltiadis Vasilakis
        mask.userInteractionEnabled = NO;
74 700184fb Miltiadis Vasilakis
        //mask.opaque = YES; //for performance
75 700184fb Miltiadis Vasilakis
        mask.frame = CGRectMake(0.0, 0.0, 320.0, 87.0);
76 700184fb Miltiadis Vasilakis
        [self addSubview:mask];
77 700184fb Miltiadis Vasilakis
        [self bringSubviewToFront:mask];
78 700184fb Miltiadis Vasilakis
        [mask release];        
79 700184fb Miltiadis Vasilakis
        [picker release];
80 700184fb Miltiadis Vasilakis
        
81 700184fb Miltiadis Vasilakis
        
82 700184fb Miltiadis Vasilakis
    }
83 700184fb Miltiadis Vasilakis
    return self;
84 700184fb Miltiadis Vasilakis
}
85 700184fb Miltiadis Vasilakis
86 700184fb Miltiadis Vasilakis
#pragma mark -
87 700184fb Miltiadis Vasilakis
#pragma mark Picker View
88 700184fb Miltiadis Vasilakis
89 700184fb Miltiadis Vasilakis
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
90 700184fb Miltiadis Vasilakis
    return 1;
91 700184fb Miltiadis Vasilakis
}
92 700184fb Miltiadis Vasilakis
93 700184fb Miltiadis Vasilakis
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
94 700184fb Miltiadis Vasilakis
    return 9;
95 700184fb Miltiadis Vasilakis
}
96 700184fb Miltiadis Vasilakis
97 700184fb Miltiadis Vasilakis
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
98 700184fb Miltiadis Vasilakis
    if (row == 0) {
99 700184fb Miltiadis Vasilakis
        selectedFamily = @"ubuntu";
100 700184fb Miltiadis Vasilakis
    } else if (row == 1) {
101 700184fb Miltiadis Vasilakis
        selectedFamily = @"redhat";
102 700184fb Miltiadis Vasilakis
    } else if (row == 2) {
103 700184fb Miltiadis Vasilakis
        selectedFamily = @"gentoo";
104 700184fb Miltiadis Vasilakis
    } else if (row == 3) {
105 700184fb Miltiadis Vasilakis
        selectedFamily = @"windows";
106 700184fb Miltiadis Vasilakis
    } else if (row == 4) {
107 700184fb Miltiadis Vasilakis
        selectedFamily = @"debian";
108 700184fb Miltiadis Vasilakis
    } else if (row == 5) {
109 700184fb Miltiadis Vasilakis
        selectedFamily = @"centos";
110 700184fb Miltiadis Vasilakis
    } else if (row == 6) {
111 700184fb Miltiadis Vasilakis
        selectedFamily = @"arch";
112 700184fb Miltiadis Vasilakis
    } else if (row == 7) {
113 700184fb Miltiadis Vasilakis
        selectedFamily = @"fedora";
114 700184fb Miltiadis Vasilakis
    } else {
115 700184fb Miltiadis Vasilakis
        selectedFamily = kCustomImage;
116 700184fb Miltiadis Vasilakis
    }
117 700184fb Miltiadis Vasilakis
    
118 700184fb Miltiadis Vasilakis
    [self.tableView reloadSections:[NSIndexSet indexSetWithIndex:kImages] withRowAnimation:UITableViewRowAnimationFade];
119 700184fb Miltiadis Vasilakis
    //[self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:kImageFamily] atScrollPosition:UITableViewScrollPositionBottom animated:NO];
120 700184fb Miltiadis Vasilakis
}
121 700184fb Miltiadis Vasilakis
122 700184fb Miltiadis Vasilakis
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view {
123 700184fb Miltiadis Vasilakis
    UIView *viewForRow = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 280, 94)] autorelease];
124 700184fb Miltiadis Vasilakis
    
125 700184fb Miltiadis Vasilakis
    NSString *filename = @"";
126 700184fb Miltiadis Vasilakis
    NSString *family = @"";
127 700184fb Miltiadis Vasilakis
    
128 700184fb Miltiadis Vasilakis
    if (row == 0) {
129 700184fb Miltiadis Vasilakis
        filename = @"ubuntu-icon.png";
130 700184fb Miltiadis Vasilakis
        family = @"Ubuntu";
131 700184fb Miltiadis Vasilakis
    } else if (row == 1) {
132 700184fb Miltiadis Vasilakis
        filename = @"redhat-icon.png";
133 700184fb Miltiadis Vasilakis
        family = @"Red Hat";
134 700184fb Miltiadis Vasilakis
    } else if (row == 2) {
135 700184fb Miltiadis Vasilakis
        filename = @"gentoo-icon.png";
136 700184fb Miltiadis Vasilakis
        family = @"Gentoo";
137 700184fb Miltiadis Vasilakis
    } else if (row == 3) {
138 700184fb Miltiadis Vasilakis
        filename = @"windows-icon.png";
139 700184fb Miltiadis Vasilakis
        family = @"Windows";
140 700184fb Miltiadis Vasilakis
    } else if (row == 4) {
141 700184fb Miltiadis Vasilakis
        filename = @"debian-icon.png";
142 700184fb Miltiadis Vasilakis
        family = @"Debian";
143 700184fb Miltiadis Vasilakis
    } else if (row == 5) {
144 700184fb Miltiadis Vasilakis
        filename = @"centos-icon.png";
145 700184fb Miltiadis Vasilakis
        family = @"CentOS";
146 700184fb Miltiadis Vasilakis
    } else if (row == 6) {
147 700184fb Miltiadis Vasilakis
        filename = @"arch-icon.png";
148 700184fb Miltiadis Vasilakis
        family = @"Arch";
149 700184fb Miltiadis Vasilakis
    } else if (row == 7) {
150 700184fb Miltiadis Vasilakis
        filename = @"fedora-icon.png";
151 700184fb Miltiadis Vasilakis
        family = @"Fedora";
152 700184fb Miltiadis Vasilakis
    } else {
153 700184fb Miltiadis Vasilakis
        filename = @"openstack_icon.png";
154 700184fb Miltiadis Vasilakis
        family = @"Custom";
155 700184fb Miltiadis Vasilakis
    }
156 700184fb Miltiadis Vasilakis
    
157 700184fb Miltiadis Vasilakis
    
158 700184fb Miltiadis Vasilakis
    
159 700184fb Miltiadis Vasilakis
    UIImageView *img = [[UIImageView alloc] initWithImage:[UIImage imageNamed:filename]];
160 700184fb Miltiadis Vasilakis
    
161 700184fb Miltiadis Vasilakis
    img.frame = CGRectMake(86.0, -30.0, 110.0, 110.0);
162 700184fb Miltiadis Vasilakis
    img.opaque = YES;
163 700184fb Miltiadis Vasilakis
    [viewForRow addSubview:img];
164 700184fb Miltiadis Vasilakis
    [img release];
165 700184fb Miltiadis Vasilakis
    
166 700184fb Miltiadis Vasilakis
    UILabel *label;
167 700184fb Miltiadis Vasilakis
    
168 700184fb Miltiadis Vasilakis
    UIFont *font = [UIFont boldSystemFontOfSize:20.0];
169 700184fb Miltiadis Vasilakis
    
170 700184fb Miltiadis Vasilakis
    label = [[[UILabel alloc] initWithFrame:CGRectMake(0, 90, 278, 35)] autorelease];
171 700184fb Miltiadis Vasilakis
    
172 700184fb Miltiadis Vasilakis
    label.text = family;
173 700184fb Miltiadis Vasilakis
    label.textAlignment = UITextAlignmentCenter;
174 700184fb Miltiadis Vasilakis
    label.textColor = [UIColor blackColor];
175 700184fb Miltiadis Vasilakis
    label.font = font;
176 700184fb Miltiadis Vasilakis
    label.backgroundColor = [UIColor clearColor];
177 700184fb Miltiadis Vasilakis
    label.opaque = NO;
178 700184fb Miltiadis Vasilakis
    [viewForRow addSubview:label];
179 700184fb Miltiadis Vasilakis
    
180 700184fb Miltiadis Vasilakis
    //CGAffineTransform rotate = CGAffineTransformMakeRotation(1.57);  
181 700184fb Miltiadis Vasilakis
    //[viewForRow setTransform:rotate]; 
182 700184fb Miltiadis Vasilakis
    
183 700184fb Miltiadis Vasilakis
    CGAffineTransform rotate = viewForRow.transform;
184 700184fb Miltiadis Vasilakis
    rotate = CGAffineTransformRotate(rotate, -4.71238898);
185 700184fb Miltiadis Vasilakis
    rotate = CGAffineTransformScale(rotate, kScaleX, kScaleY);
186 700184fb Miltiadis Vasilakis
    
187 700184fb Miltiadis Vasilakis
    
188 700184fb Miltiadis Vasilakis
    CGAffineTransform t0 = CGAffineTransformMakeTranslation(3, 22.5);
189 700184fb Miltiadis Vasilakis
    viewForRow.transform = CGAffineTransformConcat(rotate,t0);
190 700184fb Miltiadis Vasilakis
    
191 700184fb Miltiadis Vasilakis
    return viewForRow;
192 700184fb Miltiadis Vasilakis
}
193 700184fb Miltiadis Vasilakis
194 700184fb Miltiadis Vasilakis
195 700184fb Miltiadis Vasilakis
- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
196 700184fb Miltiadis Vasilakis
197 700184fb Miltiadis Vasilakis
    [super setSelected:selected animated:animated];
198 700184fb Miltiadis Vasilakis
199 700184fb Miltiadis Vasilakis
    // Configure the view for the selected state
200 700184fb Miltiadis Vasilakis
}
201 700184fb Miltiadis Vasilakis
202 700184fb Miltiadis Vasilakis
- (void)dealloc {
203 700184fb Miltiadis Vasilakis
    [account release];
204 700184fb Miltiadis Vasilakis
    [tableView release];
205 700184fb Miltiadis Vasilakis
    [images release];
206 700184fb Miltiadis Vasilakis
    [selectedFamily release];
207 700184fb Miltiadis Vasilakis
    [super dealloc];
208 700184fb Miltiadis Vasilakis
}
209 700184fb Miltiadis Vasilakis
210 700184fb Miltiadis Vasilakis
211 700184fb Miltiadis Vasilakis
@end