2 // HMFleetViewController.m
5 // Created by Hori,Masaki on 2015/03/01.
6 // Copyright (c) 2015年 Hori,Masaki. All rights reserved.
9 #import "HMFleetViewController.h"
10 #import "HMShipDetailViewController.h"
11 #import "HMMinimumShipViewController.h"
13 #import "HMKCShipObject+Extensions.h"
14 #import "HMKCDeck+Extension.h"
16 #import "HMServerDataStore.h"
18 @interface HMFleetViewController ()
20 @property (weak) Class shipViewClass;
22 @property (readwrite) HMFleetViewType type;
24 @property (nonatomic, weak) IBOutlet NSView *placeholder01;
25 @property (nonatomic, weak) IBOutlet NSView *placeholder02;
26 @property (nonatomic, weak) IBOutlet NSView *placeholder03;
27 @property (nonatomic, weak) IBOutlet NSView *placeholder04;
28 @property (nonatomic, weak) IBOutlet NSView *placeholder05;
29 @property (nonatomic, weak) IBOutlet NSView *placeholder06;
31 @property (strong) HMShipDetailViewController *detail01;
32 @property (strong) HMShipDetailViewController *detail02;
33 @property (strong) HMShipDetailViewController *detail03;
34 @property (strong) HMShipDetailViewController *detail04;
35 @property (strong) HMShipDetailViewController *detail05;
36 @property (strong) HMShipDetailViewController *detail06;
40 @implementation HMFleetViewController
41 @synthesize fleetNumber = _fleetNumber;
42 @synthesize shipOrder = _shipOrder;
46 return [[[self class] alloc] initWithViewType:minimumViewType];
49 - (instancetype)initWithViewType:(HMFleetViewType)type
51 Class shipViewClass = Nil;
52 NSString *nibName = nil;
55 nibName = NSStringFromClass([self class]);
56 shipViewClass = [HMShipDetailViewController class];
59 nibName = @"HMFleetMinimumViewController";
60 shipViewClass = [HMMinimumShipViewController class];
65 self = [super initWithNibName:@"" bundle:nil];
66 NSLog(@"UnknownType");
70 self = [super initWithNibName:nibName bundle:nil];
73 _shipViewClass = shipViewClass;
80 // self = [super initWithNibName:NSStringFromClass([self class]) bundle:nil];
84 - (void)awakeFromNib {
86 for(NSInteger i = 1; i < 7; i++) {
87 NSString *detailKey = [NSString stringWithFormat:@"detail%02ld", i];
88 NSString *placeholderKey = [NSString stringWithFormat:@"placeholder%02ld", i];
89 HMShipDetailViewController *detail = [self.shipViewClass new];
90 detail.title = [NSString stringWithFormat:@"%ld", i];
91 [self setValue:detail forKey:detailKey];
92 NSView *view = [self valueForKey:placeholderKey];
94 [detail.view setFrame:[view frame]];
95 [detail.view setAutoresizingMask:[view autoresizingMask]];
96 [[view superview] replaceSubview:view with:detail.view];
102 - (void)setShipID:(NSInteger)shipId toDetail:(HMShipDetailViewController *)detail
104 HMServerDataStore *store = [HMServerDataStore defaultManager];
105 NSError *error = nil;
106 HMKCShipObject *ship = nil;
107 NSArray *array = [store objectsWithEntityName:@"Ship"
109 predicateFormat:@"id = %ld", shipId];
111 NSLog(@"%s error: %@", __PRETTY_FUNCTION__, error);
113 if(array.count != 0) {
118 - (void)setFleet:(HMKCDeck *)fleet
120 for(NSInteger i = 0; i < 6; i++) {
121 [self.representedObject removeObserver:self
122 forKeyPath:[NSString stringWithFormat:@"ship_%ld", i]];
125 for(NSInteger i = 0; i < 6; i++) {
126 [fleet addObserver:self
127 forKeyPath:[NSString stringWithFormat:@"ship_%ld", i]
132 self.representedObject = fleet;
133 self.title = fleet.name;
135 for(NSInteger i = 1; i < 7; i++) {
136 NSString *shipID = [self.fleet valueForKey:[NSString stringWithFormat:@"ship_%ld", i - 1]];
137 HMShipDetailViewController *detail = [self valueForKey:[NSString stringWithFormat:@"detail%02ld", i]];
138 [self setShipID:shipID.integerValue toDetail:detail];
143 return self.representedObject;
146 - (void)setFleetNumber:(NSInteger)fleetNumber
148 HMServerDataStore *store = [HMServerDataStore defaultManager];
149 NSError *error = nil;
150 NSArray *array = [store objectsWithEntityName:@"Deck"
152 predicateFormat:@"id = %ld", fleetNumber];
154 NSLog(@"%s error: %@", __PRETTY_FUNCTION__, error);
157 if(array.count == 0) {
161 self.fleet = array[0];
162 _fleetNumber = fleetNumber;
164 - (NSInteger)fleetNumber
169 - (void)setShipOrder:(HMFleetViewShipOrder)shipOrder
171 if(_shipOrder == shipOrder) return;
172 _shipOrder = shipOrder;
176 [self reorderShipToDoubleLine];
179 [self reorderShipToLeftToRight];
183 - (HMFleetViewShipOrder)shipOrder
190 return self.type == detailViewType;
192 - (CGFloat)normalHeight
197 case minimumViewType:
202 - (CGFloat)upsideHeight
207 case minimumViewType:
214 + (NSSet *)keyPathsForValuesAffectingTotalSakuteki
216 return [NSSet setWithObjects:
217 @"detail01.ship.sakuteki_0",
218 @"detail02.ship.sakuteki_0",
219 @"detail03.ship.sakuteki_0",
220 @"detail04.ship.sakuteki_0",
221 @"detail05.ship.sakuteki_0",
222 @"detail06.ship.sakuteki_0",
225 - (NSNumber *)totalSakuteki
228 for(NSInteger i = 1; i < 7; i++) {
229 HMShipDetailViewController *detail = [self valueForKey:[NSString stringWithFormat:@"detail%02ld", i]];
230 HMKCShipObject *ship = detail.ship;
231 total += ship.sakuteki_0.integerValue;
236 + (NSSet *)keyPathsForValuesAffectingTotalSeiku
238 return [NSSet setWithObjects:
239 @"detail01.ship.seiku",
240 @"detail02.ship.seiku",
241 @"detail03.ship.seiku",
242 @"detail04.ship.seiku",
243 @"detail05.ship.seiku",
244 @"detail06.ship.seiku",
247 - (NSNumber *)totalSeiku
250 for(NSInteger i = 1; i < 7; i++) {
251 HMShipDetailViewController *detail = [self valueForKey:[NSString stringWithFormat:@"detail%02ld", i]];
252 HMKCShipObject *ship = detail.ship;
253 total += ship.seiku.integerValue;
258 - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
260 if([keyPath isEqualToString:@"ship_0"]) {
261 [self setShipID:[[object valueForKey:keyPath] integerValue] toDetail:self.detail01];
264 if([keyPath isEqualToString:@"ship_1"]) {
265 [self setShipID:[[object valueForKey:keyPath] integerValue] toDetail:self.detail02];
268 if([keyPath isEqualToString:@"ship_2"]) {
269 [self setShipID:[[object valueForKey:keyPath] integerValue] toDetail:self.detail03];
272 if([keyPath isEqualToString:@"ship_3"]) {
273 [self setShipID:[[object valueForKey:keyPath] integerValue] toDetail:self.detail04];
276 if([keyPath isEqualToString:@"ship_4"]) {
277 [self setShipID:[[object valueForKey:keyPath] integerValue] toDetail:self.detail05];
280 if([keyPath isEqualToString:@"ship_5"]) {
281 [self setShipID:[[object valueForKey:keyPath] integerValue] toDetail:self.detail06];
285 return [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
288 - (void)reorderShipToDoubleLine
290 NSView *view02 = self.detail02.view;
291 NSView *view03 = self.detail03.view;
292 NSView *view04 = self.detail04.view;
293 NSView *view05 = self.detail05.view;
295 NSAutoresizingMaskOptions options02 = view02.autoresizingMask;
296 NSAutoresizingMaskOptions options03 = view03.autoresizingMask;
297 NSAutoresizingMaskOptions options04 = view04.autoresizingMask;
298 NSAutoresizingMaskOptions options05 = view05.autoresizingMask;
300 view02.autoresizingMask = options04;
301 view03.autoresizingMask = options02;
302 view04.autoresizingMask = options05;
303 view05.autoresizingMask = options03;
305 NSRect frame02 = view02.frame;
306 NSRect frame03 = view03.frame;
307 NSRect frame04 = view04.frame;
308 NSRect frame05 = view05.frame;
310 view02.animator.frame = frame04;
311 view03.animator.frame = frame02;
312 view04.animator.frame = frame05;
313 view05.animator.frame = frame03;
315 - (void)reorderShipToLeftToRight
317 NSView *view02 = self.detail02.view;
318 NSView *view03 = self.detail03.view;
319 NSView *view04 = self.detail04.view;
320 NSView *view05 = self.detail05.view;
322 NSAutoresizingMaskOptions options02 = view02.autoresizingMask;
323 NSAutoresizingMaskOptions options03 = view03.autoresizingMask;
324 NSAutoresizingMaskOptions options04 = view04.autoresizingMask;
325 NSAutoresizingMaskOptions options05 = view05.autoresizingMask;
327 view02.autoresizingMask = options03;
328 view03.autoresizingMask = options05;
329 view04.autoresizingMask = options02;
330 view05.autoresizingMask = options04;
332 NSRect frame02 = view02.frame;
333 NSRect frame03 = view03.frame;
334 NSRect frame04 = view04.frame;
335 NSRect frame05 = view05.frame;
337 view02.animator.frame = frame03;
338 view03.animator.frame = frame05;
339 view04.animator.frame = frame02;
340 view05.animator.frame = frame04;