Mac用艦これ専用ブラウザ おまけ機能付き
Revision | c3dbd8c0817f6ba7225186d749bd5d59ce9f1682 (tree) |
---|---|
Time | 2015-09-15 22:37:29 |
Author | masakih <masakih@user...> |
Commiter | masakih |
@@ -16,18 +16,54 @@ static CGImageRef sMaskImage = nil; | ||
16 | 16 | |
17 | 17 | @interface HMSlotItemLevelView () |
18 | 18 | |
19 | -@property (strong) HMKCSlotItemObject *slotItem; | |
19 | +@property (strong) NSObjectController *slotItemController; | |
20 | + | |
21 | +@property (nonatomic, strong) NSNumber *slotItemLevel; | |
22 | +@property (nonatomic, strong) NSNumber *slotItemAlv; | |
20 | 23 | |
21 | 24 | @end |
22 | 25 | |
23 | 26 | @implementation HMSlotItemLevelView |
24 | 27 | |
28 | +- (instancetype)initWithFrame:(NSRect)frameRect | |
29 | +{ | |
30 | + self = [super initWithFrame:frameRect]; | |
31 | + if(self) { | |
32 | + _slotItemController = [NSObjectController new]; | |
33 | + [self bind:@"slotItemLevel" | |
34 | + toObject:_slotItemController | |
35 | + withKeyPath:@"selection.level" | |
36 | + options:nil]; | |
37 | + [self bind:@"slotItemAlv" | |
38 | + toObject:_slotItemController | |
39 | + withKeyPath:@"selection.alv" | |
40 | + options:nil]; | |
41 | + } | |
42 | + return self; | |
43 | +} | |
44 | +- (instancetype)initWithCoder:(NSCoder *)coder | |
45 | +{ | |
46 | + self = [super initWithCoder:coder]; | |
47 | + if(self) { | |
48 | + _slotItemController = [NSObjectController new]; | |
49 | + [self bind:@"slotItemLevel" | |
50 | + toObject:_slotItemController | |
51 | + withKeyPath:@"content.level" | |
52 | + options:nil]; | |
53 | + [self bind:@"slotItemAlv" | |
54 | + toObject:_slotItemController | |
55 | + withKeyPath:@"content.alv" | |
56 | + options:nil]; | |
57 | + } | |
58 | + return self; | |
59 | +} | |
25 | 60 | - (void)dealloc |
26 | 61 | { |
27 | - [self.slotItem removeObserver:self forKeyPath:@"level"]; | |
28 | - [self.slotItem removeObserver:self forKeyPath:@"alv"]; | |
62 | + [self unbind:@"slotItemLevel"]; | |
63 | + [self unbind:@"slotItemAlv"]; | |
29 | 64 | } |
30 | 65 | |
66 | + | |
31 | 67 | - (CGImageRef)maskImage |
32 | 68 | { |
33 | 69 | if(sMaskImage) return sMaskImage; |
@@ -301,15 +337,10 @@ static CGImageRef sMaskImage = nil; | ||
301 | 337 | return shadow; |
302 | 338 | } |
303 | 339 | |
304 | -- (NSNumber *)slotItemAlv | |
340 | +- (void)setSlotItemLevel:(NSNumber *)slotItemLevel | |
305 | 341 | { |
306 | - if(!self.slotItemID) return nil; | |
307 | - | |
308 | - if(!self.slotItem) { | |
309 | - [self fetchSlotItem]; | |
310 | - } | |
311 | - | |
312 | - return self.slotItem.alv; | |
342 | + _slotItemLevel = slotItemLevel; | |
343 | + self.needsDisplay = YES; | |
313 | 344 | } |
314 | 345 | |
315 | 346 |
@@ -345,26 +376,19 @@ static CGImageRef sMaskImage = nil; | ||
345 | 376 | [attrString drawInRect:rect]; |
346 | 377 | } |
347 | 378 | |
348 | -- (NSNumber *)slotItemLevel | |
379 | +- (void)setSlotItemAlv:(NSNumber *)slotItemAlv | |
349 | 380 | { |
350 | - if(!self.slotItemID) return nil; | |
351 | - | |
352 | - if(!self.slotItem) { | |
353 | - [self fetchSlotItem]; | |
354 | - } | |
355 | - | |
356 | - return self.slotItem.level; | |
381 | + _slotItemAlv = slotItemAlv; | |
382 | + self.needsDisplay = YES; | |
357 | 383 | } |
358 | 384 | |
359 | 385 | #pragma mark - property |
360 | 386 | |
361 | 387 | - (void)fetchSlotItem |
362 | 388 | { |
363 | - [self.slotItem removeObserver:self forKeyPath:@"level"]; | |
364 | - [self.slotItem removeObserver:self forKeyPath:@"alv"]; | |
389 | + self.slotItemController.content = nil; | |
365 | 390 | |
366 | 391 | if(!self.slotItemID || [self.slotItemID isEqual:@(-1)]) { |
367 | - self.slotItem = nil; | |
368 | 392 | return; |
369 | 393 | } |
370 | 394 |
@@ -375,37 +399,21 @@ static CGImageRef sMaskImage = nil; | ||
375 | 399 | predicateFormat:@"id = %@", self.slotItemID]; |
376 | 400 | if(error) { |
377 | 401 | NSLog(@"SlotItem is invalid -> %@", error); |
378 | - self.slotItem = nil; | |
379 | 402 | return; |
380 | 403 | } |
381 | 404 | if(array.count == 0) { |
382 | 405 | NSLog(@"Can not find slotItem for %@", self.slotItemID); |
383 | - self.slotItem = nil; | |
384 | 406 | return; |
385 | 407 | } |
386 | 408 | |
387 | - self.slotItem = array[0]; | |
388 | - | |
389 | - [self.slotItem addObserver:self forKeyPath:@"level" options:0 context:NULL]; | |
390 | - [self.slotItem addObserver:self forKeyPath:@"alv" options:0 context:NULL]; | |
409 | + self.slotItemController.content = array[0]; | |
391 | 410 | } |
392 | 411 | - (void)setSlotItemID:(NSNumber *)slotItemID |
393 | 412 | { |
394 | 413 | if([self.slotItemID isEqual:slotItemID]) return; |
395 | - self.slotItem = nil; | |
396 | 414 | _slotItemID = slotItemID; |
397 | 415 | [self fetchSlotItem]; |
398 | 416 | self.needsDisplay = YES; |
399 | 417 | } |
400 | 418 | |
401 | -- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context | |
402 | -{ | |
403 | - if([keyPath isEqualToString:@"level"] || [keyPath isEqualToString:@"alv"]) { | |
404 | - self.needsDisplay = YES; | |
405 | - return; | |
406 | - } | |
407 | - | |
408 | - [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; | |
409 | -} | |
410 | - | |
411 | 419 | @end |