Merge pull request #15 from vector-im/MXKDataSource_refactoring

MXKDataSource refactoring
This commit is contained in:
giomfo 2015-12-07 11:56:43 +01:00
commit 521a5786f3
5 changed files with 52 additions and 22 deletions

View file

@ -18,8 +18,6 @@
#import "EventFormatter.h"
#import "RoomBubbleCellData.h"
#import "RoomIncomingBubbleTableViewCell.h"
#import "RoomOutgoingBubbleTableViewCell.h"
@implementation RoomDataSource
@ -31,16 +29,6 @@
// Replace default Cell data class
[self registerCellDataClass:RoomBubbleCellData.class forCellIdentifier:kMXKRoomBubbleCellDataIdentifier];
// Replace cell view classes
[self registerCellViewClass:RoomIncomingBubbleTableViewCell.class forCellIdentifier:kMXKRoomIncomingTextMsgCellIdentifier];
[self registerCellViewClass:RoomIncomingBubbleTableViewCell.class forCellIdentifier:kMXKRoomIncomingTextMsgHiddenSenderCellIdentifier];
[self registerCellViewClass:RoomIncomingBubbleTableViewCell.class forCellIdentifier:kMXKRoomIncomingAttachmentCellIdentifier];
[self registerCellViewClass:RoomIncomingBubbleTableViewCell.class forCellIdentifier:kMXKRoomIncomingAttachmentHiddenSenderCellIdentifier];
[self registerCellViewClass:RoomOutgoingBubbleTableViewCell.class forCellIdentifier:kMXKRoomOutgoingTextMsgCellIdentifier];
[self registerCellViewClass:RoomOutgoingBubbleTableViewCell.class forCellIdentifier:kMXKRoomOutgoingTextMsgHiddenSenderCellIdentifier];
[self registerCellViewClass:RoomOutgoingBubbleTableViewCell.class forCellIdentifier:kMXKRoomOutgoingAttachmentCellIdentifier];
[self registerCellViewClass:RoomOutgoingBubbleTableViewCell.class forCellIdentifier:kMXKRoomOutgoingAttachmentHiddenSenderCellIdentifier];
// Replace event formatter
self.eventFormatter = [[EventFormatter alloc] initWithMatrixSession:self.mxSession];

View file

@ -16,8 +16,6 @@
#import "RecentsDataSource.h"
#import "RecentTableViewCell.h"
#import "EventFormatter.h"
#import "VectorDesignValues.h"
@ -44,9 +42,6 @@
self = [super init];
if (self)
{
// Reset default view classes
[self registerCellViewClass:RecentTableViewCell.class forCellIdentifier:kMXKRecentCellIdentifier];
// Replace event formatter
self.eventFormatter = [[EventFormatter alloc] initWithMatrixSession:self.mxSession];
@ -210,11 +205,12 @@
- (CGFloat)cellHeightAtIndexPath:(NSIndexPath *)indexPath
{
// Override this method here to use our own cellDataAtIndexPath
id<MXKRecentCellDataStoring> cellData = [self cellDataAtIndexPath:indexPath];
if (cellData)
if (cellData && self.delegate)
{
Class<MXKCellRendering> class = [self cellViewClassForCellIdentifier:kMXKRecentCellIdentifier];
Class<MXKCellRendering> class = [self.delegate cellViewClassForCellData:cellData];
return [class heightForCellData:cellData withMaximumWidth:0];
}

View file

@ -17,6 +17,8 @@
#import "RecentsViewController.h"
#import "RoomViewController.h"
#import "RecentTableViewCell.h"
#import "RageShakeManager.h"
#import "NSBundle+MatrixKit.h"
@ -76,6 +78,9 @@
// The view controller handles itself the selected recent
self.delegate = self;
// Register here the customized cell view class used to render recents
[self.recentsTableView registerNib:RecentTableViewCell.nib forCellReuseIdentifier:RecentTableViewCell.defaultReuseIdentifier];
}
- (void)dealloc
@ -417,6 +422,18 @@
#pragma mark - MXKDataSourceDelegate
- (Class<MXKCellRendering>)cellViewClassForCellData:(MXKCellData*)cellData
{
// Return the customized recent table view cell
return RecentTableViewCell.class;
}
- (NSString *)cellReuseIdentifierForCellData:(MXKCellData*)cellData
{
// Return the customized recent table view cell identifier
return RecentTableViewCell.defaultReuseIdentifier;
}
- (void)dataSource:(MXKDataSource *)dataSource didCellChange:(id)changes
{
[self.recentsTableView reloadData];

View file

@ -30,6 +30,9 @@
#import "SegmentedViewController.h"
#import "RoomSettingsViewController.h"
#import "RoomOutgoingBubbleTableViewCell.h"
#import "RoomIncomingBubbleTableViewCell.h"
#import "AvatarGenerator.h"
@interface RoomViewController ()
@ -78,6 +81,10 @@
// this room view controller has its own typing management.
self.roomDataSource.showTypingNotifications = NO;
}
// Register here customized cell view classes used to render bubbles
[self.bubblesTableView registerClass:RoomOutgoingBubbleTableViewCell.class forCellReuseIdentifier:RoomOutgoingBubbleTableViewCell.defaultReuseIdentifier];
[self.bubblesTableView registerClass:RoomIncomingBubbleTableViewCell.class forCellReuseIdentifier:RoomIncomingBubbleTableViewCell.defaultReuseIdentifier];
}
- (void)didReceiveMemoryWarning
@ -212,6 +219,31 @@
[super destroy];
}
#pragma mark - MXKDataSourceDelegate
- (Class<MXKCellRendering>)cellViewClassForCellData:(MXKCellData*)cellData
{
Class cellViewClass = nil;
// Sanity check
if ([cellData conformsToProtocol:@protocol(MXKRoomBubbleCellDataStoring)])
{
id<MXKRoomBubbleCellDataStoring> bubbleData = (id<MXKRoomBubbleCellDataStoring>)cellData;
// Select the suitable table view cell class
if (bubbleData.isIncoming)
{
cellViewClass = RoomIncomingBubbleTableViewCell.class;
}
else
{
cellViewClass = RoomOutgoingBubbleTableViewCell.class;
}
}
return cellViewClass;
}
#pragma mark - MXKDataSource delegate
- (void)dataSource:(MXKDataSource *)dataSource didRecognizeAction:(NSString *)actionIdentifier inCell:(id<MXKCellRendering>)cell userInfo:(NSDictionary *)userInfo

View file

@ -115,9 +115,6 @@
}
}
+ (CGFloat)heightForCellData:(MXKCellData *)cellData withMaximumWidth:(CGFloat)maxWidth
{
// The height is fixed