Statistics
| Branch: | Tag: | Revision:

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