root / Classes / RootViewController.m @ 3a8071d4
History | View | Annotate | Download (13.8 kB)
1 | 700184fb | Miltiadis Vasilakis | // |
---|---|---|---|
2 | 700184fb | Miltiadis Vasilakis | // RootViewController.m |
3 | 700184fb | Miltiadis Vasilakis | // OpenStack |
4 | 700184fb | Miltiadis Vasilakis | // |
5 | 700184fb | Miltiadis Vasilakis | // Created by Mike Mayo on 9/30/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 "RootViewController.h" |
10 | 700184fb | Miltiadis Vasilakis | #import "ProvidersViewController.h" |
11 | 700184fb | Miltiadis Vasilakis | #import "OpenStackAccount.h" |
12 | 700184fb | Miltiadis Vasilakis | #import "Provider.h" |
13 | 700184fb | Miltiadis Vasilakis | #import "Archiver.h" |
14 | 700184fb | Miltiadis Vasilakis | #import "ActivityIndicatorView.h" |
15 | 700184fb | Miltiadis Vasilakis | #import "UIViewController+Conveniences.h" |
16 | 700184fb | Miltiadis Vasilakis | #import "SettingsViewController.h" |
17 | 700184fb | Miltiadis Vasilakis | #import "Keychain.h" |
18 | 700184fb | Miltiadis Vasilakis | #import "PasscodeViewController.h" |
19 | 700184fb | Miltiadis Vasilakis | #import "OpenStackAppDelegate.h" |
20 | 07592312 | Miltiadis Vasilakis | #import "AccountHomeViewController.h" |
21 | c7ddd1f3 | Miltiadis Vasilakis | #import "PithosImageViewController.h" |
22 | 700184fb | Miltiadis Vasilakis | |
23 | 700184fb | Miltiadis Vasilakis | |
24 | 700184fb | Miltiadis Vasilakis | @implementation RootViewController |
25 | 700184fb | Miltiadis Vasilakis | |
26 | 700184fb | Miltiadis Vasilakis | @synthesize tableView, popoverController, detailItem; |
27 | 07592312 | Miltiadis Vasilakis | @synthesize restoreAccountView; |
28 | 700184fb | Miltiadis Vasilakis | |
29 | 700184fb | Miltiadis Vasilakis | - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation { |
30 | 700184fb | Miltiadis Vasilakis | return (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) || (toInterfaceOrientation == UIInterfaceOrientationPortrait); |
31 | 700184fb | Miltiadis Vasilakis | } |
32 | 700184fb | Miltiadis Vasilakis | |
33 | 07592312 | Miltiadis Vasilakis | - (void)restoreProviderView:(AccountDetailsViewController *)accountDetailsViewController { |
34 | 07592312 | Miltiadis Vasilakis | OpenStackAppDelegate *app = [[UIApplication sharedApplication] delegate]; |
35 | 07592312 | Miltiadis Vasilakis | ProvidersViewController *vc = [[ProvidersViewController alloc] initWithNibName:@"ProvidersViewController" bundle:nil]; |
36 | 07592312 | Miltiadis Vasilakis | vc.rootViewController = self; |
37 | 07592312 | Miltiadis Vasilakis | if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { |
38 | 07592312 | Miltiadis Vasilakis | vc.modalPresentationStyle = UIModalPresentationFormSheet; |
39 | 07592312 | Miltiadis Vasilakis | if (app.rootViewController.popoverController != nil) { |
40 | 07592312 | Miltiadis Vasilakis | [app.rootViewController.popoverController dismissPopoverAnimated:YES]; |
41 | 07592312 | Miltiadis Vasilakis | } |
42 | 07592312 | Miltiadis Vasilakis | } |
43 | 07592312 | Miltiadis Vasilakis | [self presentModalViewControllerWithNavigation:vc animated:NO]; |
44 | 07592312 | Miltiadis Vasilakis | [vc restoreAccountDetailsViewController:accountDetailsViewController]; |
45 | 07592312 | Miltiadis Vasilakis | [vc release]; |
46 | 07592312 | Miltiadis Vasilakis | } |
47 | 07592312 | Miltiadis Vasilakis | |
48 | 07592312 | Miltiadis Vasilakis | - (void)restoreAccountView:(AccountSettingsViewController *)accountSettingsViewController { |
49 | 45f2fce6 | Miltiadis Vasilakis | /*NSArray *pathList = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); |
50 | 45f2fce6 | Miltiadis Vasilakis | NSString *path = [pathList objectAtIndex:0]; |
51 | 45f2fce6 | Miltiadis Vasilakis | NSString *filePath = [NSString stringWithFormat:@"%@/iostestfile.txt", path]; |
52 | 45f2fce6 | Miltiadis Vasilakis | */ |
53 | 45f2fce6 | Miltiadis Vasilakis | /* self.navigationItem.title = @"Accounts"; |
54 | 45f2fce6 | Miltiadis Vasilakis | |
55 | 45f2fce6 | Miltiadis Vasilakis | self.navigationItem.leftBarButtonItem = self.editButtonItem; |
56 | 45f2fce6 | Miltiadis Vasilakis | |
57 | 45f2fce6 | Miltiadis Vasilakis | UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(addButtonPressed:)]; |
58 | 45f2fce6 | Miltiadis Vasilakis | self.navigationItem.rightBarButtonItem = addButton; |
59 | 45f2fce6 | Miltiadis Vasilakis | [addButton release]; |
60 | 45f2fce6 | Miltiadis Vasilakis | */ |
61 | 07592312 | Miltiadis Vasilakis | AccountHomeViewController *vc = [[AccountHomeViewController alloc] initWithNibName:@"AccountHomeViewController" bundle:nil]; |
62 | 07592312 | Miltiadis Vasilakis | vc.account = accountSettingsViewController.account; |
63 | 07592312 | Miltiadis Vasilakis | vc.account.hasBeenRefreshed = NO; |
64 | 07592312 | Miltiadis Vasilakis | vc.rootViewController = self; |
65 | 07592312 | Miltiadis Vasilakis | [self.navigationController pushViewController:vc animated:YES]; |
66 | 07592312 | Miltiadis Vasilakis | [vc release]; |
67 | 07592312 | Miltiadis Vasilakis | } |
68 | 07592312 | Miltiadis Vasilakis | |
69 | 700184fb | Miltiadis Vasilakis | #pragma mark - |
70 | 700184fb | Miltiadis Vasilakis | #pragma mark Split view support |
71 | 700184fb | Miltiadis Vasilakis | |
72 | 700184fb | Miltiadis Vasilakis | /* |
73 | 700184fb | Miltiadis Vasilakis | When setting the detail item, update the view and dismiss the popover controller if it's showing. |
74 | 700184fb | Miltiadis Vasilakis | */ |
75 | 700184fb | Miltiadis Vasilakis | - (void)setDetailItem:(id)newDetailItem { |
76 | 700184fb | Miltiadis Vasilakis | if (detailItem != newDetailItem) { |
77 | 700184fb | Miltiadis Vasilakis | [detailItem release]; |
78 | 700184fb | Miltiadis Vasilakis | detailItem = [newDetailItem retain]; |
79 | 700184fb | Miltiadis Vasilakis | } |
80 | 700184fb | Miltiadis Vasilakis | |
81 | 700184fb | Miltiadis Vasilakis | if (self.popoverController != nil) { |
82 | 700184fb | Miltiadis Vasilakis | [self.popoverController dismissPopoverAnimated:YES]; |
83 | 700184fb | Miltiadis Vasilakis | } |
84 | 700184fb | Miltiadis Vasilakis | } |
85 | 700184fb | Miltiadis Vasilakis | |
86 | 700184fb | Miltiadis Vasilakis | - (void)splitViewController:(UISplitViewController*)svc willHideViewController:(UIViewController *)aViewController withBarButtonItem:(UIBarButtonItem*)barButtonItem forPopoverController: (UIPopoverController*)pc { |
87 | 700184fb | Miltiadis Vasilakis | OpenStackAppDelegate *app = [[UIApplication sharedApplication] delegate]; |
88 | 700184fb | Miltiadis Vasilakis | app.barButtonItem = barButtonItem; |
89 | 700184fb | Miltiadis Vasilakis | UIViewController *vc = [[[app.splitViewController.viewControllers objectAtIndex:1] viewControllers] lastObject]; |
90 | 700184fb | Miltiadis Vasilakis | barButtonItem.title = [[[self.navigationController.viewControllers lastObject] navigationItem] title]; |
91 | 700184fb | Miltiadis Vasilakis | vc.navigationItem.leftBarButtonItem = barButtonItem; |
92 | 700184fb | Miltiadis Vasilakis | self.popoverController = pc; |
93 | 700184fb | Miltiadis Vasilakis | } |
94 | 700184fb | Miltiadis Vasilakis | |
95 | 700184fb | Miltiadis Vasilakis | - (void)splitViewController: (UISplitViewController*)svc willShowViewController:(UIViewController *)aViewController invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem { |
96 | 700184fb | Miltiadis Vasilakis | OpenStackAppDelegate *app = [[UIApplication sharedApplication] delegate]; |
97 | 700184fb | Miltiadis Vasilakis | app.barButtonItem = barButtonItem; |
98 | 700184fb | Miltiadis Vasilakis | UIViewController *vc = [[[app.splitViewController.viewControllers objectAtIndex:1] viewControllers] lastObject]; |
99 | 700184fb | Miltiadis Vasilakis | vc.navigationItem.leftBarButtonItem = nil; |
100 | 700184fb | Miltiadis Vasilakis | self.popoverController = nil; |
101 | 700184fb | Miltiadis Vasilakis | } |
102 | 700184fb | Miltiadis Vasilakis | |
103 | 700184fb | Miltiadis Vasilakis | #pragma mark - |
104 | 700184fb | Miltiadis Vasilakis | #pragma mark Button Handlers |
105 | 700184fb | Miltiadis Vasilakis | |
106 | 700184fb | Miltiadis Vasilakis | - (void)addButtonPressed:(id)sender { |
107 | 700184fb | Miltiadis Vasilakis | OpenStackAppDelegate *app = [[UIApplication sharedApplication] delegate]; |
108 | 700184fb | Miltiadis Vasilakis | ProvidersViewController *vc = [[ProvidersViewController alloc] initWithNibName:@"ProvidersViewController" bundle:nil]; |
109 | 700184fb | Miltiadis Vasilakis | vc.rootViewController = self; |
110 | 700184fb | Miltiadis Vasilakis | if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { |
111 | 700184fb | Miltiadis Vasilakis | vc.modalPresentationStyle = UIModalPresentationFormSheet; |
112 | 700184fb | Miltiadis Vasilakis | if (app.rootViewController.popoverController != nil) { |
113 | 700184fb | Miltiadis Vasilakis | [app.rootViewController.popoverController dismissPopoverAnimated:YES]; |
114 | 700184fb | Miltiadis Vasilakis | } |
115 | 700184fb | Miltiadis Vasilakis | } |
116 | 700184fb | Miltiadis Vasilakis | [self presentModalViewControllerWithNavigation:vc]; |
117 | 700184fb | Miltiadis Vasilakis | [vc release]; |
118 | 700184fb | Miltiadis Vasilakis | } |
119 | 700184fb | Miltiadis Vasilakis | |
120 | 700184fb | Miltiadis Vasilakis | - (void)settingsButtonPressed:(id)sender { |
121 | 700184fb | Miltiadis Vasilakis | |
122 | 700184fb | Miltiadis Vasilakis | //self.navigationController.navigationBarHidden = YES; |
123 | 700184fb | Miltiadis Vasilakis | |
124 | 700184fb | Miltiadis Vasilakis | //UIView *containerView = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 460.0)]; |
125 | 700184fb | Miltiadis Vasilakis | |
126 | 700184fb | Miltiadis Vasilakis | SettingsViewController *settingsViewController = [[SettingsViewController alloc] initWithNibName:@"SettingsViewController" bundle:nil]; |
127 | 700184fb | Miltiadis Vasilakis | |
128 | 700184fb | Miltiadis Vasilakis | UINavigationController *settingsNavigationController = [[UINavigationController alloc] initWithRootViewController:settingsViewController]; |
129 | 700184fb | Miltiadis Vasilakis | settingsNavigationController.view.frame = CGRectMake(0.0, 0.0, 320.0, 460.0); |
130 | 700184fb | Miltiadis Vasilakis | |
131 | 700184fb | Miltiadis Vasilakis | if (UI_USER_INTERFACE_IDIOM() != UIUserInterfaceIdiomPad) { |
132 | 700184fb | Miltiadis Vasilakis | settingsNavigationController.navigationBar.tintColor = self.navigationController.navigationBar.tintColor; |
133 | 700184fb | Miltiadis Vasilakis | settingsNavigationController.navigationBar.translucent = self.navigationController.navigationBar.translucent; |
134 | 700184fb | Miltiadis Vasilakis | settingsNavigationController.navigationBar.opaque = self.navigationController.navigationBar.opaque; |
135 | 700184fb | Miltiadis Vasilakis | settingsNavigationController.navigationBar.barStyle = self.navigationController.navigationBar.barStyle; |
136 | 700184fb | Miltiadis Vasilakis | } else { |
137 | 700184fb | Miltiadis Vasilakis | settingsNavigationController.navigationBar.barStyle = UIBarStyleBlack; |
138 | 700184fb | Miltiadis Vasilakis | settingsNavigationController.navigationBar.opaque = NO; |
139 | 700184fb | Miltiadis Vasilakis | } |
140 | 700184fb | Miltiadis Vasilakis | |
141 | 700184fb | Miltiadis Vasilakis | if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { |
142 | 700184fb | Miltiadis Vasilakis | if (self.popoverController != nil) { |
143 | 700184fb | Miltiadis Vasilakis | [self.popoverController dismissPopoverAnimated:YES]; |
144 | 700184fb | Miltiadis Vasilakis | } |
145 | 700184fb | Miltiadis Vasilakis | settingsNavigationController.modalPresentationStyle = UIModalPresentationFormSheet; |
146 | 700184fb | Miltiadis Vasilakis | [self presentModalViewController:settingsNavigationController animated:YES]; |
147 | 700184fb | Miltiadis Vasilakis | } else { |
148 | 700184fb | Miltiadis Vasilakis | settingsNavigationController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; |
149 | 700184fb | Miltiadis Vasilakis | [self presentModalViewController:settingsNavigationController animated:YES]; |
150 | 700184fb | Miltiadis Vasilakis | } |
151 | 700184fb | Miltiadis Vasilakis | |
152 | 700184fb | Miltiadis Vasilakis | [settingsViewController release]; |
153 | 700184fb | Miltiadis Vasilakis | [settingsNavigationController release]; |
154 | 700184fb | Miltiadis Vasilakis | |
155 | 700184fb | Miltiadis Vasilakis | |
156 | 700184fb | Miltiadis Vasilakis | } |
157 | 700184fb | Miltiadis Vasilakis | |
158 | 700184fb | Miltiadis Vasilakis | #pragma mark - |
159 | 700184fb | Miltiadis Vasilakis | #pragma mark View lifecycle |
160 | 700184fb | Miltiadis Vasilakis | |
161 | 700184fb | Miltiadis Vasilakis | - (void)setEditing:(BOOL)editing animated:(BOOL)animated { |
162 | 700184fb | Miltiadis Vasilakis | [self.tableView setEditing:editing animated:animated]; |
163 | 700184fb | Miltiadis Vasilakis | [super setEditing:editing animated:animated]; |
164 | 700184fb | Miltiadis Vasilakis | } |
165 | 700184fb | Miltiadis Vasilakis | |
166 | 700184fb | Miltiadis Vasilakis | - (void)presentAndRelease:(NSTimer *)timer { |
167 | 700184fb | Miltiadis Vasilakis | UIViewController *vc = [timer.userInfo objectForKey:@"vc"]; |
168 | 700184fb | Miltiadis Vasilakis | [self presentModalViewControllerWithNavigation:vc animated:NO]; |
169 | 700184fb | Miltiadis Vasilakis | [vc release]; |
170 | 700184fb | Miltiadis Vasilakis | } |
171 | 700184fb | Miltiadis Vasilakis | |
172 | 700184fb | Miltiadis Vasilakis | - (void)viewDidLoad { |
173 | 700184fb | Miltiadis Vasilakis | [super viewDidLoad]; |
174 | 3a8071d4 | Miltiadis Vasilakis | |
175 | 700184fb | Miltiadis Vasilakis | self.navigationItem.title = @"Accounts"; |
176 | 700184fb | Miltiadis Vasilakis | |
177 | 700184fb | Miltiadis Vasilakis | self.navigationItem.leftBarButtonItem = self.editButtonItem; |
178 | 700184fb | Miltiadis Vasilakis | |
179 | 700184fb | Miltiadis Vasilakis | UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(addButtonPressed:)]; |
180 | 700184fb | Miltiadis Vasilakis | self.navigationItem.rightBarButtonItem = addButton; |
181 | 3a8071d4 | Miltiadis Vasilakis | [addButton release]; |
182 | 700184fb | Miltiadis Vasilakis | } |
183 | 700184fb | Miltiadis Vasilakis | |
184 | 700184fb | Miltiadis Vasilakis | - (void)viewWillAppear:(BOOL)animated { |
185 | 700184fb | Miltiadis Vasilakis | [super viewWillAppear:animated]; |
186 | c7ddd1f3 | Miltiadis Vasilakis | [self.tableView reloadData]; |
187 | c7ddd1f3 | Miltiadis Vasilakis | |
188 | c7ddd1f3 | Miltiadis Vasilakis | if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { |
189 | c7ddd1f3 | Miltiadis Vasilakis | PithosImageViewController *vc = [[PithosImageViewController alloc] initWithNibName:@"PithosImageViewController" bundle:nil]; |
190 | c7ddd1f3 | Miltiadis Vasilakis | [self.navigationController presentPrimaryViewController:vc]; |
191 | c7ddd1f3 | Miltiadis Vasilakis | [vc release]; |
192 | c7ddd1f3 | Miltiadis Vasilakis | } |
193 | 3a8071d4 | Miltiadis Vasilakis | |
194 | 700184fb | Miltiadis Vasilakis | } |
195 | 700184fb | Miltiadis Vasilakis | |
196 | 700184fb | Miltiadis Vasilakis | - (void)viewDidAppear:(BOOL)animated { |
197 | 700184fb | Miltiadis Vasilakis | [super viewDidAppear:animated]; |
198 | 3a8071d4 | Miltiadis Vasilakis | |
199 | 3a8071d4 | Miltiadis Vasilakis | if (!viewHasAppearedBefore) { |
200 | 3a8071d4 | Miltiadis Vasilakis | if ([[OpenStackAccount accounts] count] == 0) { |
201 | 3a8071d4 | Miltiadis Vasilakis | // if there are no accounts, go straight to the add account screen on launch |
202 | 3a8071d4 | Miltiadis Vasilakis | ProvidersViewController *vc = [[ProvidersViewController alloc] initWithNibName:@"ProvidersViewController" bundle:nil]; |
203 | 3a8071d4 | Miltiadis Vasilakis | vc.rootViewController = self; |
204 | 3a8071d4 | Miltiadis Vasilakis | if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { |
205 | 3a8071d4 | Miltiadis Vasilakis | vc.modalPresentationStyle = UIModalPresentationFormSheet; |
206 | 3a8071d4 | Miltiadis Vasilakis | } |
207 | 3a8071d4 | Miltiadis Vasilakis | [self presentModalViewControllerWithNavigation:vc]; |
208 | 3a8071d4 | Miltiadis Vasilakis | [vc release]; |
209 | 3a8071d4 | Miltiadis Vasilakis | } else if (([[OpenStackAccount accounts] count] == 1) && (UI_USER_INTERFACE_IDIOM() != UIUserInterfaceIdiomPad)) { |
210 | 3a8071d4 | Miltiadis Vasilakis | // if there's only one account, go to its home screen |
211 | 3a8071d4 | Miltiadis Vasilakis | // NOTE: not doing this on iPad because it screws up the split view controller. |
212 | 3a8071d4 | Miltiadis Vasilakis | // TODO: make this work well with split view on iPad |
213 | 3a8071d4 | Miltiadis Vasilakis | AccountHomeViewController *vc = [[AccountHomeViewController alloc] initWithNibName:@"AccountHomeViewController" bundle:nil]; |
214 | 3a8071d4 | Miltiadis Vasilakis | vc.account = [[OpenStackAccount accounts] objectAtIndex:0]; |
215 | 3a8071d4 | Miltiadis Vasilakis | vc.rootViewController = self; |
216 | 3a8071d4 | Miltiadis Vasilakis | vc.rootViewIndexPath = [NSIndexPath indexPathForRow:0 inSection:0]; |
217 | 3a8071d4 | Miltiadis Vasilakis | [self.navigationController pushViewController:vc animated:NO]; |
218 | 3a8071d4 | Miltiadis Vasilakis | [vc release]; |
219 | 3a8071d4 | Miltiadis Vasilakis | } |
220 | 3a8071d4 | Miltiadis Vasilakis | viewHasAppearedBefore = YES; |
221 | 3a8071d4 | Miltiadis Vasilakis | } |
222 | 700184fb | Miltiadis Vasilakis | } |
223 | 700184fb | Miltiadis Vasilakis | |
224 | 700184fb | Miltiadis Vasilakis | /* |
225 | 700184fb | Miltiadis Vasilakis | - (void)viewWillDisappear:(BOOL)animated { |
226 | 700184fb | Miltiadis Vasilakis | [super viewWillDisappear:animated]; |
227 | 700184fb | Miltiadis Vasilakis | } |
228 | 700184fb | Miltiadis Vasilakis | */ |
229 | 700184fb | Miltiadis Vasilakis | /* |
230 | 700184fb | Miltiadis Vasilakis | - (void)viewDidDisappear:(BOOL)animated { |
231 | 700184fb | Miltiadis Vasilakis | [super viewDidDisappear:animated]; |
232 | 700184fb | Miltiadis Vasilakis | } |
233 | 700184fb | Miltiadis Vasilakis | */ |
234 | 700184fb | Miltiadis Vasilakis | |
235 | 700184fb | Miltiadis Vasilakis | #pragma mark - |
236 | 700184fb | Miltiadis Vasilakis | #pragma mark Table view data source |
237 | 700184fb | Miltiadis Vasilakis | |
238 | 700184fb | Miltiadis Vasilakis | - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { |
239 | 700184fb | Miltiadis Vasilakis | return 1; |
240 | 700184fb | Miltiadis Vasilakis | } |
241 | 700184fb | Miltiadis Vasilakis | |
242 | 700184fb | Miltiadis Vasilakis | - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { |
243 | 700184fb | Miltiadis Vasilakis | return [[OpenStackAccount accounts] count]; |
244 | 700184fb | Miltiadis Vasilakis | } |
245 | 700184fb | Miltiadis Vasilakis | |
246 | 700184fb | Miltiadis Vasilakis | - (UITableViewCell *)tableView:(UITableView *)aTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { |
247 | 700184fb | Miltiadis Vasilakis | |
248 | 700184fb | Miltiadis Vasilakis | static NSString *CellIdentifier = @"Cell"; |
249 | 700184fb | Miltiadis Vasilakis | |
250 | 700184fb | Miltiadis Vasilakis | UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; |
251 | 700184fb | Miltiadis Vasilakis | if (cell == nil) { |
252 | 700184fb | Miltiadis Vasilakis | cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease]; |
253 | 700184fb | Miltiadis Vasilakis | cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; |
254 | 700184fb | Miltiadis Vasilakis | } |
255 | 700184fb | Miltiadis Vasilakis | |
256 | 700184fb | Miltiadis Vasilakis | // Configure the cell. |
257 | 700184fb | Miltiadis Vasilakis | OpenStackAccount *account = [[OpenStackAccount accounts] objectAtIndex:indexPath.row]; |
258 | 700184fb | Miltiadis Vasilakis | cell.textLabel.text = account.username; |
259 | 700184fb | Miltiadis Vasilakis | cell.detailTextLabel.text = account.provider.name; |
260 | 700184fb | Miltiadis Vasilakis | |
261 | 700184fb | Miltiadis Vasilakis | if (account.provider.logoURLs && [account.provider.logoURLs objectForKey:@"provider_icon"]) { |
262 | 700184fb | Miltiadis Vasilakis | cell.imageView.image = [UIImage imageNamed:[account.provider.logoURLs objectForKey:@"provider_icon"]]; |
263 | 700184fb | Miltiadis Vasilakis | } else { |
264 | 07592312 | Miltiadis Vasilakis | cell.imageView.image = [UIImage imageNamed:@"pithos-solo-smallest.png"]; |
265 | 700184fb | Miltiadis Vasilakis | } |
266 | 700184fb | Miltiadis Vasilakis | |
267 | 700184fb | Miltiadis Vasilakis | return cell; |
268 | 700184fb | Miltiadis Vasilakis | } |
269 | 700184fb | Miltiadis Vasilakis | |
270 | 700184fb | Miltiadis Vasilakis | - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { |
271 | 700184fb | Miltiadis Vasilakis | return YES; |
272 | 700184fb | Miltiadis Vasilakis | } |
273 | 700184fb | Miltiadis Vasilakis | |
274 | 700184fb | Miltiadis Vasilakis | - (void)tableView:(UITableView *)aTableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { |
275 | 700184fb | Miltiadis Vasilakis | |
276 | 700184fb | Miltiadis Vasilakis | if (editingStyle == UITableViewCellEditingStyleDelete) { |
277 | 700184fb | Miltiadis Vasilakis | NSMutableArray *accounts = [NSMutableArray arrayWithArray:[OpenStackAccount accounts]]; |
278 | 700184fb | Miltiadis Vasilakis | [[accounts objectAtIndex:indexPath.row] setFlaggedForDelete:YES]; |
279 | 700184fb | Miltiadis Vasilakis | [accounts removeObjectAtIndex:indexPath.row]; |
280 | 700184fb | Miltiadis Vasilakis | [OpenStackAccount persist:accounts]; |
281 | 700184fb | Miltiadis Vasilakis | |
282 | 700184fb | Miltiadis Vasilakis | // Delete the row from the data source. |
283 | 700184fb | Miltiadis Vasilakis | [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; |
284 | 700184fb | Miltiadis Vasilakis | |
285 | 700184fb | Miltiadis Vasilakis | } else if (editingStyle == UITableViewCellEditingStyleInsert) { |
286 | 700184fb | Miltiadis Vasilakis | // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view. |
287 | 700184fb | Miltiadis Vasilakis | } |
288 | 700184fb | Miltiadis Vasilakis | } |
289 | 700184fb | Miltiadis Vasilakis | |
290 | 700184fb | Miltiadis Vasilakis | // Override to support rearranging the table view. |
291 | 700184fb | Miltiadis Vasilakis | - (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath { |
292 | 700184fb | Miltiadis Vasilakis | NSMutableArray *accounts = [NSMutableArray arrayWithArray:[OpenStackAccount accounts]]; |
293 | 700184fb | Miltiadis Vasilakis | OpenStackAccount *account = [accounts objectAtIndex:fromIndexPath.row]; |
294 | 700184fb | Miltiadis Vasilakis | [accounts removeObjectAtIndex:fromIndexPath.row]; |
295 | 700184fb | Miltiadis Vasilakis | [accounts insertObject:account atIndex:toIndexPath.row]; |
296 | 700184fb | Miltiadis Vasilakis | [OpenStackAccount persist:accounts]; |
297 | 700184fb | Miltiadis Vasilakis | } |
298 | 700184fb | Miltiadis Vasilakis | |
299 | 700184fb | Miltiadis Vasilakis | // Override to support conditional rearranging of the table view. |
300 | 700184fb | Miltiadis Vasilakis | - (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath { |
301 | 700184fb | Miltiadis Vasilakis | // Return NO if you do not want the item to be re-orderable. |
302 | 700184fb | Miltiadis Vasilakis | return YES; |
303 | 700184fb | Miltiadis Vasilakis | } |
304 | 700184fb | Miltiadis Vasilakis | |
305 | 700184fb | Miltiadis Vasilakis | #pragma mark - |
306 | 700184fb | Miltiadis Vasilakis | #pragma mark Table view delegate |
307 | 700184fb | Miltiadis Vasilakis | |
308 | 700184fb | Miltiadis Vasilakis | - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { |
309 | 700184fb | Miltiadis Vasilakis | AccountHomeViewController *vc = [[AccountHomeViewController alloc] initWithNibName:@"AccountHomeViewController" bundle:nil]; |
310 | 700184fb | Miltiadis Vasilakis | vc.account = [[OpenStackAccount accounts] objectAtIndex:indexPath.row]; |
311 | 700184fb | Miltiadis Vasilakis | vc.account.hasBeenRefreshed = NO; |
312 | 700184fb | Miltiadis Vasilakis | vc.rootViewController = self; |
313 | 700184fb | Miltiadis Vasilakis | vc.rootViewIndexPath = indexPath; |
314 | 700184fb | Miltiadis Vasilakis | [self.navigationController pushViewController:vc animated:YES]; |
315 | 700184fb | Miltiadis Vasilakis | [vc release]; |
316 | 700184fb | Miltiadis Vasilakis | } |
317 | 700184fb | Miltiadis Vasilakis | |
318 | 700184fb | Miltiadis Vasilakis | #pragma mark - |
319 | 700184fb | Miltiadis Vasilakis | #pragma mark Memory management |
320 | 700184fb | Miltiadis Vasilakis | |
321 | 700184fb | Miltiadis Vasilakis | - (void)didReceiveMemoryWarning { |
322 | 700184fb | Miltiadis Vasilakis | // Releases the view if it doesn't have a superview. |
323 | 700184fb | Miltiadis Vasilakis | [super didReceiveMemoryWarning]; |
324 | 700184fb | Miltiadis Vasilakis | |
325 | 700184fb | Miltiadis Vasilakis | // Relinquish ownership any cached data, images, etc that aren't in use. |
326 | 700184fb | Miltiadis Vasilakis | } |
327 | 700184fb | Miltiadis Vasilakis | |
328 | 700184fb | Miltiadis Vasilakis | - (void)viewDidUnload { |
329 | 700184fb | Miltiadis Vasilakis | // Relinquish ownership of anything that can be recreated in viewDidLoad or on demand. |
330 | 700184fb | Miltiadis Vasilakis | // For example: self.myOutlet = nil; |
331 | 700184fb | Miltiadis Vasilakis | } |
332 | 700184fb | Miltiadis Vasilakis | |
333 | 700184fb | Miltiadis Vasilakis | |
334 | 700184fb | Miltiadis Vasilakis | - (void)dealloc { |
335 | 700184fb | Miltiadis Vasilakis | [tableView release]; |
336 | 700184fb | Miltiadis Vasilakis | [popoverController release]; |
337 | 700184fb | Miltiadis Vasilakis | [detailItem release]; |
338 | 700184fb | Miltiadis Vasilakis | [super dealloc]; |
339 | 700184fb | Miltiadis Vasilakis | } |
340 | 700184fb | Miltiadis Vasilakis | |
341 | 700184fb | Miltiadis Vasilakis | |
342 | 700184fb | Miltiadis Vasilakis | @end |