root / Classes / FolderDetailViewController.m @ 38d59b6c
History | View | Annotate | Download (7.3 kB)
1 | 38d59b6c | Miltiadis Vasilakis | // |
---|---|---|---|
2 | 38d59b6c | Miltiadis Vasilakis | // FolderDetailViewController.m |
3 | 38d59b6c | Miltiadis Vasilakis | // pithos-ios |
4 | 38d59b6c | Miltiadis Vasilakis | // |
5 | 38d59b6c | Miltiadis Vasilakis | // Copyright 2011 GRNET S.A. All rights reserved. |
6 | 38d59b6c | Miltiadis Vasilakis | // |
7 | 38d59b6c | Miltiadis Vasilakis | // Redistribution and use in source and binary forms, with or |
8 | 38d59b6c | Miltiadis Vasilakis | // without modification, are permitted provided that the following |
9 | 38d59b6c | Miltiadis Vasilakis | // conditions are met: |
10 | 38d59b6c | Miltiadis Vasilakis | // |
11 | 38d59b6c | Miltiadis Vasilakis | // 1. Redistributions of source code must retain the above |
12 | 38d59b6c | Miltiadis Vasilakis | // copyright notice, this list of conditions and the following |
13 | 38d59b6c | Miltiadis Vasilakis | // disclaimer. |
14 | 38d59b6c | Miltiadis Vasilakis | // |
15 | 38d59b6c | Miltiadis Vasilakis | // 2. Redistributions in binary form must reproduce the above |
16 | 38d59b6c | Miltiadis Vasilakis | // copyright notice, this list of conditions and the following |
17 | 38d59b6c | Miltiadis Vasilakis | // disclaimer in the documentation and/or other materials |
18 | 38d59b6c | Miltiadis Vasilakis | // provided with the distribution. |
19 | 38d59b6c | Miltiadis Vasilakis | // |
20 | 38d59b6c | Miltiadis Vasilakis | // THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS |
21 | 38d59b6c | Miltiadis Vasilakis | // OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
22 | 38d59b6c | Miltiadis Vasilakis | // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
23 | 38d59b6c | Miltiadis Vasilakis | // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR |
24 | 38d59b6c | Miltiadis Vasilakis | // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
25 | 38d59b6c | Miltiadis Vasilakis | // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
26 | 38d59b6c | Miltiadis Vasilakis | // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF |
27 | 38d59b6c | Miltiadis Vasilakis | // USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED |
28 | 38d59b6c | Miltiadis Vasilakis | // AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
29 | 38d59b6c | Miltiadis Vasilakis | // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN |
30 | 38d59b6c | Miltiadis Vasilakis | // ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
31 | 38d59b6c | Miltiadis Vasilakis | // POSSIBILITY OF SUCH DAMAGE. |
32 | 38d59b6c | Miltiadis Vasilakis | // |
33 | 38d59b6c | Miltiadis Vasilakis | // The views and conclusions contained in the software and |
34 | 38d59b6c | Miltiadis Vasilakis | // documentation are those of the authors and should not be |
35 | 38d59b6c | Miltiadis Vasilakis | // interpreted as representing official policies, either expressed |
36 | 38d59b6c | Miltiadis Vasilakis | // or implied, of GRNET S.A. |
37 | 38d59b6c | Miltiadis Vasilakis | |
38 | 38d59b6c | Miltiadis Vasilakis | #import "FolderDetailViewController.h" |
39 | 38d59b6c | Miltiadis Vasilakis | #import "EditMetadataViewController.h" |
40 | 38d59b6c | Miltiadis Vasilakis | |
41 | 38d59b6c | Miltiadis Vasilakis | #define kOverview 0 |
42 | 38d59b6c | Miltiadis Vasilakis | #define kMetadata 1 |
43 | 38d59b6c | Miltiadis Vasilakis | |
44 | 38d59b6c | Miltiadis Vasilakis | #define maxMetadataViewableLength 12 |
45 | 38d59b6c | Miltiadis Vasilakis | |
46 | 38d59b6c | Miltiadis Vasilakis | |
47 | 38d59b6c | Miltiadis Vasilakis | @implementation FolderDetailViewController |
48 | 38d59b6c | Miltiadis Vasilakis | |
49 | 38d59b6c | Miltiadis Vasilakis | @synthesize account, container, folder; |
50 | 38d59b6c | Miltiadis Vasilakis | |
51 | 38d59b6c | Miltiadis Vasilakis | - (id)initWithStyle:(UITableViewStyle)style |
52 | 38d59b6c | Miltiadis Vasilakis | { |
53 | 38d59b6c | Miltiadis Vasilakis | self = [super initWithStyle:style]; |
54 | 38d59b6c | Miltiadis Vasilakis | if (self) { |
55 | 38d59b6c | Miltiadis Vasilakis | // Custom initialization |
56 | 38d59b6c | Miltiadis Vasilakis | } |
57 | 38d59b6c | Miltiadis Vasilakis | return self; |
58 | 38d59b6c | Miltiadis Vasilakis | } |
59 | 38d59b6c | Miltiadis Vasilakis | |
60 | 38d59b6c | Miltiadis Vasilakis | - (void)dealloc |
61 | 38d59b6c | Miltiadis Vasilakis | { |
62 | 38d59b6c | Miltiadis Vasilakis | [folder release]; |
63 | 38d59b6c | Miltiadis Vasilakis | [super dealloc]; |
64 | 38d59b6c | Miltiadis Vasilakis | } |
65 | 38d59b6c | Miltiadis Vasilakis | |
66 | 38d59b6c | Miltiadis Vasilakis | - (void)didReceiveMemoryWarning |
67 | 38d59b6c | Miltiadis Vasilakis | { |
68 | 38d59b6c | Miltiadis Vasilakis | // Releases the view if it doesn't have a superview. |
69 | 38d59b6c | Miltiadis Vasilakis | [super didReceiveMemoryWarning]; |
70 | 38d59b6c | Miltiadis Vasilakis | |
71 | 38d59b6c | Miltiadis Vasilakis | // Release any cached data, images, etc that aren't in use. |
72 | 38d59b6c | Miltiadis Vasilakis | } |
73 | 38d59b6c | Miltiadis Vasilakis | |
74 | 38d59b6c | Miltiadis Vasilakis | #pragma mark - View lifecycle |
75 | 38d59b6c | Miltiadis Vasilakis | |
76 | 38d59b6c | Miltiadis Vasilakis | - (void)viewDidLoad |
77 | 38d59b6c | Miltiadis Vasilakis | { |
78 | 38d59b6c | Miltiadis Vasilakis | [super viewDidLoad]; |
79 | 38d59b6c | Miltiadis Vasilakis | } |
80 | 38d59b6c | Miltiadis Vasilakis | |
81 | 38d59b6c | Miltiadis Vasilakis | - (void)viewDidUnload |
82 | 38d59b6c | Miltiadis Vasilakis | { |
83 | 38d59b6c | Miltiadis Vasilakis | [super viewDidUnload]; |
84 | 38d59b6c | Miltiadis Vasilakis | } |
85 | 38d59b6c | Miltiadis Vasilakis | |
86 | 38d59b6c | Miltiadis Vasilakis | - (void)viewWillAppear:(BOOL)animated |
87 | 38d59b6c | Miltiadis Vasilakis | { |
88 | 38d59b6c | Miltiadis Vasilakis | [super viewWillAppear:animated]; |
89 | 38d59b6c | Miltiadis Vasilakis | |
90 | 38d59b6c | Miltiadis Vasilakis | [self.tableView reloadData]; |
91 | 38d59b6c | Miltiadis Vasilakis | } |
92 | 38d59b6c | Miltiadis Vasilakis | |
93 | 38d59b6c | Miltiadis Vasilakis | - (void)viewDidAppear:(BOOL)animated |
94 | 38d59b6c | Miltiadis Vasilakis | { |
95 | 38d59b6c | Miltiadis Vasilakis | [super viewDidAppear:animated]; |
96 | 38d59b6c | Miltiadis Vasilakis | } |
97 | 38d59b6c | Miltiadis Vasilakis | |
98 | 38d59b6c | Miltiadis Vasilakis | - (void)viewWillDisappear:(BOOL)animated |
99 | 38d59b6c | Miltiadis Vasilakis | { |
100 | 38d59b6c | Miltiadis Vasilakis | [super viewWillDisappear:animated]; |
101 | 38d59b6c | Miltiadis Vasilakis | } |
102 | 38d59b6c | Miltiadis Vasilakis | |
103 | 38d59b6c | Miltiadis Vasilakis | - (void)viewDidDisappear:(BOOL)animated |
104 | 38d59b6c | Miltiadis Vasilakis | { |
105 | 38d59b6c | Miltiadis Vasilakis | [super viewDidDisappear:animated]; |
106 | 38d59b6c | Miltiadis Vasilakis | } |
107 | 38d59b6c | Miltiadis Vasilakis | |
108 | 38d59b6c | Miltiadis Vasilakis | - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation { |
109 | 38d59b6c | Miltiadis Vasilakis | return (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) || (toInterfaceOrientation == UIInterfaceOrientationPortrait); |
110 | 38d59b6c | Miltiadis Vasilakis | } |
111 | 38d59b6c | Miltiadis Vasilakis | |
112 | 38d59b6c | Miltiadis Vasilakis | #pragma mark - Table view data source |
113 | 38d59b6c | Miltiadis Vasilakis | |
114 | 38d59b6c | Miltiadis Vasilakis | - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView |
115 | 38d59b6c | Miltiadis Vasilakis | { |
116 | 38d59b6c | Miltiadis Vasilakis | return 2; |
117 | 38d59b6c | Miltiadis Vasilakis | } |
118 | 38d59b6c | Miltiadis Vasilakis | |
119 | 38d59b6c | Miltiadis Vasilakis | - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section |
120 | 38d59b6c | Miltiadis Vasilakis | { |
121 | 38d59b6c | Miltiadis Vasilakis | if (section == kOverview) |
122 | 38d59b6c | Miltiadis Vasilakis | return 2; |
123 | 38d59b6c | Miltiadis Vasilakis | else |
124 | 38d59b6c | Miltiadis Vasilakis | return 1 + [folder.metadata count]; |
125 | 38d59b6c | Miltiadis Vasilakis | } |
126 | 38d59b6c | Miltiadis Vasilakis | |
127 | 38d59b6c | Miltiadis Vasilakis | - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath |
128 | 38d59b6c | Miltiadis Vasilakis | { |
129 | 38d59b6c | Miltiadis Vasilakis | static NSString *CellIdentifier = @"Cell"; |
130 | 38d59b6c | Miltiadis Vasilakis | |
131 | 38d59b6c | Miltiadis Vasilakis | UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; |
132 | 38d59b6c | Miltiadis Vasilakis | if (cell == nil) { |
133 | 38d59b6c | Miltiadis Vasilakis | cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease]; |
134 | 38d59b6c | Miltiadis Vasilakis | |
135 | 38d59b6c | Miltiadis Vasilakis | cell.textLabel.backgroundColor = [UIColor clearColor]; |
136 | 38d59b6c | Miltiadis Vasilakis | cell.detailTextLabel.backgroundColor = [UIColor clearColor]; |
137 | 38d59b6c | Miltiadis Vasilakis | cell.detailTextLabel.numberOfLines = 0; |
138 | 38d59b6c | Miltiadis Vasilakis | cell.detailTextLabel.lineBreakMode = UILineBreakModeWordWrap; |
139 | 38d59b6c | Miltiadis Vasilakis | cell.detailTextLabel.textAlignment = UITextAlignmentRight; |
140 | 38d59b6c | Miltiadis Vasilakis | } |
141 | 38d59b6c | Miltiadis Vasilakis | |
142 | 38d59b6c | Miltiadis Vasilakis | if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { |
143 | 38d59b6c | Miltiadis Vasilakis | cell.backgroundColor = [UIColor colorWithRed:1 green:1 blue:1 alpha:0.8]; |
144 | 38d59b6c | Miltiadis Vasilakis | } |
145 | 38d59b6c | Miltiadis Vasilakis | |
146 | 38d59b6c | Miltiadis Vasilakis | if (indexPath.section == kOverview) { |
147 | 38d59b6c | Miltiadis Vasilakis | cell.accessoryType = UITableViewCellAccessoryNone; |
148 | 38d59b6c | Miltiadis Vasilakis | cell.selectionStyle = UITableViewCellSelectionStyleNone; |
149 | 38d59b6c | Miltiadis Vasilakis | cell.accessoryView = nil; |
150 | 38d59b6c | Miltiadis Vasilakis | if (indexPath.row == 0) { |
151 | 38d59b6c | Miltiadis Vasilakis | cell.textLabel.text = @"Name"; |
152 | 38d59b6c | Miltiadis Vasilakis | cell.detailTextLabel.text = folder.name; |
153 | 38d59b6c | Miltiadis Vasilakis | } else if (indexPath.row == 1) { |
154 | 38d59b6c | Miltiadis Vasilakis | cell.textLabel.text = @"Full Path"; |
155 | 38d59b6c | Miltiadis Vasilakis | cell.detailTextLabel.text = [folder fullPath]; |
156 | 38d59b6c | Miltiadis Vasilakis | } |
157 | 38d59b6c | Miltiadis Vasilakis | } else if (indexPath.section == kMetadata) { |
158 | 38d59b6c | Miltiadis Vasilakis | cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; |
159 | 38d59b6c | Miltiadis Vasilakis | cell.selectionStyle = UITableViewCellSelectionStyleBlue; |
160 | 38d59b6c | Miltiadis Vasilakis | cell.accessoryView = nil; |
161 | 38d59b6c | Miltiadis Vasilakis | if (indexPath.row == [folder.metadata count]) { |
162 | 38d59b6c | Miltiadis Vasilakis | cell.textLabel.text = @"Add Metadata"; |
163 | 38d59b6c | Miltiadis Vasilakis | cell.detailTextLabel.text = @""; |
164 | 38d59b6c | Miltiadis Vasilakis | } else { |
165 | 38d59b6c | Miltiadis Vasilakis | NSString *key = [[folder.metadata allKeys] objectAtIndex:indexPath.row]; |
166 | 38d59b6c | Miltiadis Vasilakis | NSString *value = [folder.metadata objectForKey:key]; |
167 | 38d59b6c | Miltiadis Vasilakis | NSString *metadataKeyCellText = key; |
168 | 38d59b6c | Miltiadis Vasilakis | NSString *metadataValueCellText = value; |
169 | 38d59b6c | Miltiadis Vasilakis | if ([metadataKeyCellText length] > maxMetadataViewableLength) { |
170 | 38d59b6c | Miltiadis Vasilakis | metadataKeyCellText = [metadataKeyCellText substringToIndex:(maxMetadataViewableLength - 3)]; |
171 | 38d59b6c | Miltiadis Vasilakis | metadataKeyCellText = [metadataKeyCellText stringByAppendingString:@"..."]; |
172 | 38d59b6c | Miltiadis Vasilakis | } |
173 | 38d59b6c | Miltiadis Vasilakis | if ([metadataValueCellText length] > maxMetadataViewableLength) { |
174 | 38d59b6c | Miltiadis Vasilakis | metadataValueCellText = [metadataValueCellText substringToIndex:(maxMetadataViewableLength - 3)]; |
175 | 38d59b6c | Miltiadis Vasilakis | metadataValueCellText = [metadataValueCellText stringByAppendingString:@"..."]; |
176 | 38d59b6c | Miltiadis Vasilakis | } |
177 | 38d59b6c | Miltiadis Vasilakis | |
178 | 38d59b6c | Miltiadis Vasilakis | cell.textLabel.text = metadataKeyCellText; |
179 | 38d59b6c | Miltiadis Vasilakis | cell.detailTextLabel.text = metadataValueCellText; |
180 | 38d59b6c | Miltiadis Vasilakis | } |
181 | 38d59b6c | Miltiadis Vasilakis | } |
182 | 38d59b6c | Miltiadis Vasilakis | |
183 | 38d59b6c | Miltiadis Vasilakis | return cell; |
184 | 38d59b6c | Miltiadis Vasilakis | } |
185 | 38d59b6c | Miltiadis Vasilakis | |
186 | 38d59b6c | Miltiadis Vasilakis | |
187 | 38d59b6c | Miltiadis Vasilakis | #pragma mark - Table view delegate |
188 | 38d59b6c | Miltiadis Vasilakis | |
189 | 38d59b6c | Miltiadis Vasilakis | - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath |
190 | 38d59b6c | Miltiadis Vasilakis | { |
191 | 38d59b6c | Miltiadis Vasilakis | if (indexPath.section == kMetadata) { |
192 | 38d59b6c | Miltiadis Vasilakis | EditMetadataViewController *vc = [[EditMetadataViewController alloc] initWithNibName:@"EditMetadataViewController" bundle:nil]; |
193 | 38d59b6c | Miltiadis Vasilakis | NSString *metadataKey; |
194 | 38d59b6c | Miltiadis Vasilakis | NSString *metadataValue; |
195 | 38d59b6c | Miltiadis Vasilakis | |
196 | 38d59b6c | Miltiadis Vasilakis | if (indexPath.row == [self.folder.metadata count]) { |
197 | 38d59b6c | Miltiadis Vasilakis | metadataKey = @""; |
198 | 38d59b6c | Miltiadis Vasilakis | metadataValue = @""; |
199 | 38d59b6c | Miltiadis Vasilakis | vc.deleteEnabled = FALSE; |
200 | 38d59b6c | Miltiadis Vasilakis | vc.navigationItem.title = @"Add Metadata"; |
201 | 38d59b6c | Miltiadis Vasilakis | } |
202 | 38d59b6c | Miltiadis Vasilakis | else { |
203 | 38d59b6c | Miltiadis Vasilakis | metadataKey = [[self.folder.metadata allKeys] objectAtIndex:indexPath.row]; |
204 | 38d59b6c | Miltiadis Vasilakis | metadataValue = [self.folder.metadata objectForKey:metadataKey]; |
205 | 38d59b6c | Miltiadis Vasilakis | vc.deleteEnabled = TRUE; |
206 | 38d59b6c | Miltiadis Vasilakis | vc.navigationItem.title = @"Edit Metadata"; |
207 | 38d59b6c | Miltiadis Vasilakis | } |
208 | 38d59b6c | Miltiadis Vasilakis | |
209 | 38d59b6c | Miltiadis Vasilakis | StorageObject *object = [[[StorageObject alloc] init] autorelease]; |
210 | 38d59b6c | Miltiadis Vasilakis | object.name = folder.name; |
211 | 38d59b6c | Miltiadis Vasilakis | object.metadata = folder.metadata; |
212 | 38d59b6c | Miltiadis Vasilakis | object.fullPath = [folder fullPath]; |
213 | 38d59b6c | Miltiadis Vasilakis | |
214 | 38d59b6c | Miltiadis Vasilakis | vc.metadataKey = metadataKey; |
215 | 38d59b6c | Miltiadis Vasilakis | vc.metadataValue = metadataValue; |
216 | 38d59b6c | Miltiadis Vasilakis | vc.account = account; |
217 | 38d59b6c | Miltiadis Vasilakis | vc.container = container; |
218 | 38d59b6c | Miltiadis Vasilakis | vc.object = object; |
219 | 38d59b6c | Miltiadis Vasilakis | |
220 | 38d59b6c | Miltiadis Vasilakis | [self.navigationController pushViewController:vc animated:YES]; |
221 | 38d59b6c | Miltiadis Vasilakis | [vc release]; |
222 | 38d59b6c | Miltiadis Vasilakis | } |
223 | 38d59b6c | Miltiadis Vasilakis | } |
224 | 38d59b6c | Miltiadis Vasilakis | |
225 | 38d59b6c | Miltiadis Vasilakis | @end |