This repository has been archived by the owner on Aug 7, 2021. It is now read-only.
/
OBAEditStopBookmarkViewController.m
184 lines (144 loc) · 5.59 KB
/
OBAEditStopBookmarkViewController.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
/**
* Copyright (C) 2009 bdferris <bdferris@onebusaway.org>
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#import "OBAEditStopBookmarkViewController.h"
#import "OBALogger.h"
#import "OBATextFieldTableViewCell.h"
#import "OBARoute.h"
#import "OBAStopViewController.h"
@implementation OBAEditStopBookmarkViewController
- (id) initWithApplicationContext:(OBAApplicationContext*)appContext bookmark:(OBABookmarkV2*)bookmark editType:(OBABookmarkEditType)editType {
if (self = [super initWithStyle:UITableViewStyleGrouped]) {
self.tableView.scrollEnabled = FALSE;
_appContext = [appContext retain];
_bookmark = [bookmark retain];
_editType = editType;
_requests = [[NSMutableArray alloc] initWithCapacity:[_bookmark.stopIds count]];
_stops = [[NSMutableDictionary alloc] init];
UIBarButtonItem * cancelButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(onCancelButton:)];
[self.navigationItem setLeftBarButtonItem:cancelButton];
[cancelButton release];
UIBarButtonItem * saveButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemSave target:self action:@selector(onSaveButton:)];
[self.navigationItem setRightBarButtonItem:saveButton];
[saveButton release];
switch(_editType) {
case OBABookmarkEditNew:
self.navigationItem.title = @"Add Bookmark";
break;
case OBABookmarkEditExisting:
self.navigationItem.title = @"Edit Bookmark";
break;
}
}
return self;
}
- (void)dealloc {
[_appContext release];
[_bookmark release];
[_stops release];
[_requests release];
[super dealloc];
}
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self.tableView reloadData];
OBAModelService * service = _appContext.modelService;
NSArray * stopIds = _bookmark.stopIds;
for( NSUInteger i=0; i<[stopIds count]; i++) {
NSString * stopId = [stopIds objectAtIndex:i];
NSNumber * index = [NSNumber numberWithInt:i];
id<OBAModelServiceRequest> request = [service requestStopForId:stopId withDelegate:self withContext:index];
[_requests addObject:request];
}
}
#pragma mark OBAModelServiceRequest
- (void)requestDidFinish:(id<OBAModelServiceRequest>)request withObject:(id)obj context:(id)context {
OBAEntryWithReferencesV2 * entry = obj;
OBAStopV2 * stop = entry.entry;
NSNumber * num = context;
NSUInteger index = [num intValue];
if( stop ) {
[_stops setObject:stop forKey:stop.stopId];
NSIndexPath * path = [NSIndexPath indexPathForRow:index+1 inSection:0];
NSArray * indexPaths = [NSArray arrayWithObject:path];
[self.tableView reloadRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationFade];
}
[_requests removeObject:request];
}
#pragma mark Table view methods
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
// Customize the number of rows in the table view.
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return 2;
}
// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
if( indexPath.row == 0 ) {
OBATextFieldTableViewCell * cell = [OBATextFieldTableViewCell getOrCreateCellForTableView:tableView];
cell.textField.text = _bookmark.name;
_textField = cell.textField;
[_textField becomeFirstResponder];
[tableView addSubview:cell]; // make keyboard slide in/out from right.
return cell;
}
else {
UITableViewCell * cell = [UITableViewCell getOrCreateCellForTableView:tableView];
NSString * stopId = [_bookmark.stopIds objectAtIndex:indexPath.row-1];
OBAStopV2 * stop = [_stops objectForKey:stopId];
if( stop )
cell.textLabel.text = [NSString stringWithFormat:@"Stop # %@ - %@",stop.code,stop.name];
else
cell.textLabel.text = @"Loading stop info...";
cell.textLabel.font = [UIFont systemFontOfSize: 12];
cell.textLabel.textColor = [UIColor grayColor];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
return cell;
}
}
- (IBAction) onCancelButton:(id)sender {
[self.navigationController popViewControllerAnimated:TRUE];
}
- (IBAction) onSaveButton:(id)sender {
OBAModelDAO * dao = _appContext.modelDao;
NSError * error = nil;
_bookmark.name = _textField.text;
switch (_editType ) {
case OBABookmarkEditNew:
[dao addNewBookmark:_bookmark error:&error];
break;
case OBABookmarkEditExisting:
[dao saveExistingBookmark:_bookmark error:&error];
break;
}
[dao saveExistingBookmark:_bookmark error:&error];
if( error )
OBALogSevereWithError(error,@"Error saving bookmark: name=%@",_bookmark.name);
// pop to stop view controller are saving settings
BOOL foundStopViewController = FALSE;
for (UIViewController* viewController in [self.navigationController viewControllers])
{
if ([viewController isKindOfClass:[OBAStopViewController class]])
{
[self.navigationController popToViewController:viewController animated:TRUE];
foundStopViewController = TRUE;
break;
}
}
if (!foundStopViewController)
[self.navigationController popViewControllerAnimated:TRUE];
}
@end