diff --git a/Vector/Model/Room/RoomDataSource.m b/Vector/Model/Room/RoomDataSource.m index 2249b409c..cc5a9a901 100644 --- a/Vector/Model/Room/RoomDataSource.m +++ b/Vector/Model/Room/RoomDataSource.m @@ -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]; diff --git a/Vector/Model/RoomList/RecentsDataSource.m b/Vector/Model/RoomList/RecentsDataSource.m index 7ea588901..0f255d76f 100644 --- a/Vector/Model/RoomList/RecentsDataSource.m +++ b/Vector/Model/RoomList/RecentsDataSource.m @@ -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 cellData = [self cellDataAtIndexPath:indexPath]; - if (cellData) + if (cellData && self.delegate) { - Class class = [self cellViewClassForCellIdentifier:kMXKRecentCellIdentifier]; + Class class = [self.delegate cellViewClassForCellData:cellData]; return [class heightForCellData:cellData withMaximumWidth:0]; } diff --git a/Vector/ViewController/RecentsViewController.m b/Vector/ViewController/RecentsViewController.m index 32fb7da09..95557f5c2 100644 --- a/Vector/ViewController/RecentsViewController.m +++ b/Vector/ViewController/RecentsViewController.m @@ -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)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]; diff --git a/Vector/ViewController/RoomViewController.m b/Vector/ViewController/RoomViewController.m index 0b9bf84db..8d84db40a 100644 --- a/Vector/ViewController/RoomViewController.m +++ b/Vector/ViewController/RoomViewController.m @@ -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)cellViewClassForCellData:(MXKCellData*)cellData +{ + Class cellViewClass = nil; + + // Sanity check + if ([cellData conformsToProtocol:@protocol(MXKRoomBubbleCellDataStoring)]) + { + id bubbleData = (id)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)cell userInfo:(NSDictionary *)userInfo diff --git a/Vector/Views/RoomList/RecentTableViewCell.m b/Vector/Views/RoomList/RecentTableViewCell.m index 390b0aae2..c0395d837 100644 --- a/Vector/Views/RoomList/RecentTableViewCell.m +++ b/Vector/Views/RoomList/RecentTableViewCell.m @@ -115,9 +115,6 @@ } } - - - + (CGFloat)heightForCellData:(MXKCellData *)cellData withMaximumWidth:(CGFloat)maxWidth { // The height is fixed