123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- //
- // PSTCollectionViewUpdateItem.m
- // PSPDFKit
- //
- // Copyright (c) 2012-2013 Peter Steinberger. All rights reserved.
- // Contributed by Sergey Gavrilyuk.
- //
- #import "PSTCollectionViewUpdateItem.h"
- #import "NSIndexPath+PSTCollectionViewAdditions.h"
- @interface PSTCollectionViewUpdateItem () {
- NSIndexPath *_initialIndexPath;
- NSIndexPath *_finalIndexPath;
- PSTCollectionUpdateAction _updateAction;
- id _gap;
- }
- @end
- @implementation PSTCollectionViewUpdateItem
- @synthesize updateAction = _updateAction;
- @synthesize indexPathBeforeUpdate = _initialIndexPath;
- @synthesize indexPathAfterUpdate = _finalIndexPath;
- - (id)initWithInitialIndexPath:(NSIndexPath *)initialIndexPath finalIndexPath:(NSIndexPath *)finalIndexPath updateAction:(PSTCollectionUpdateAction)updateAction {
- if ((self = [super init])) {
- _initialIndexPath = initialIndexPath;
- _finalIndexPath = finalIndexPath;
- _updateAction = updateAction;
- }
- return self;
- }
- - (id)initWithAction:(PSTCollectionUpdateAction)updateAction forIndexPath:(NSIndexPath *)indexPath {
- if (updateAction == PSTCollectionUpdateActionInsert)
- return [self initWithInitialIndexPath:nil finalIndexPath:indexPath updateAction:updateAction];
- else if (updateAction == PSTCollectionUpdateActionDelete)
- return [self initWithInitialIndexPath:indexPath finalIndexPath:nil updateAction:updateAction];
- else if (updateAction == PSTCollectionUpdateActionReload)
- return [self initWithInitialIndexPath:indexPath finalIndexPath:indexPath updateAction:updateAction];
- return nil;
- }
- - (id)initWithOldIndexPath:(NSIndexPath *)oldIndexPath newIndexPath:(NSIndexPath *)newIndexPath {
- return [self initWithInitialIndexPath:oldIndexPath finalIndexPath:newIndexPath updateAction:PSTCollectionUpdateActionMove];
- }
- - (NSString *)description {
- NSString *action = nil;
- switch (_updateAction) {
- case PSTCollectionUpdateActionInsert: action = @"insert"; break;
- case PSTCollectionUpdateActionDelete: action = @"delete"; break;
- case PSTCollectionUpdateActionMove: action = @"move"; break;
- case PSTCollectionUpdateActionReload: action = @"reload"; break;
- default: break;
- }
- return [NSString stringWithFormat:@"Index path before update (%@) index path after update (%@) action (%@).", _initialIndexPath, _finalIndexPath, action];
- }
- - (void)setNewIndexPath:(NSIndexPath *)indexPath {
- _finalIndexPath = indexPath;
- }
- - (void)setGap:(id)gap {
- _gap = gap;
- }
- - (BOOL)isSectionOperation {
- return (_initialIndexPath.item == NSNotFound || _finalIndexPath.item == NSNotFound);
- }
- - (NSIndexPath *)newIndexPath {
- return _finalIndexPath;
- }
- - (id)gap {
- return _gap;
- }
- - (PSTCollectionUpdateAction)action {
- return _updateAction;
- }
- - (id)indexPath {
- //TODO: check this
- return _initialIndexPath;
- }
- - (NSComparisonResult)compareIndexPaths:(PSTCollectionViewUpdateItem *)otherItem {
- NSComparisonResult result = NSOrderedSame;
- NSIndexPath *selfIndexPath = nil;
- NSIndexPath *otherIndexPath = nil;
- switch (_updateAction) {
- case PSTCollectionUpdateActionInsert:
- selfIndexPath = _finalIndexPath;
- otherIndexPath = [otherItem newIndexPath];
- break;
- case PSTCollectionUpdateActionDelete:
- selfIndexPath = _initialIndexPath;
- otherIndexPath = [otherItem indexPath];
- default: break;
- }
- if (self.isSectionOperation) result = [@(selfIndexPath.section) compare:@(otherIndexPath.section)];
- else result = [selfIndexPath compare:otherIndexPath];
- return result;
- }
- - (NSComparisonResult)inverseCompareIndexPaths:(PSTCollectionViewUpdateItem *)otherItem {
- return (NSComparisonResult)([self compareIndexPaths:otherItem] * -1);
- }
- @end
|