/* Copyright 2024 New Vector Ltd. Copyright 2015 OpenMarket Ltd SPDX-License-Identifier: AGPL-3.0-only Please see LICENSE in the repository root for full details. */ #import "MatrixKit.h" @class CircleProgressView; /** Action identifier used when the user pressed edit button displayed in front of a selected event. The `userInfo` dictionary contains an `MXEvent` object under the `kMXKRoomBubbleCellEventKey` key, representing the selected event. */ extern NSString *const kMXKRoomBubbleCellRiotEditButtonPressed; /** Action identifier used when the user tapped on receipts area. The 'userInfo' dictionary contains an 'MXKReceiptSendersContainer' object under the 'kMXKRoomBubbleCellReceiptsContainerKey' key, representing the receipts container which was tapped on. */ extern NSString *const kMXKRoomBubbleCellTapOnReceiptsContainer; /** Action identifier used when the user tapped on the add reaction button. The 'userInfo' dictionary contains a 'NSString' object under the 'kMXKRoomBubbleCellEventIdKey' key, representing the event id of the event associated with the reactions. */ extern NSString *const kMXKRoomBubbleCellTapOnAddReaction; /** Action identifier used when the user perform a long press on reactions view. The 'userInfo' dictionary contains a 'NSString' object under the 'kMXKRoomBubbleCellEventIdKey' key, representing the event id of the event associated with the reactions. */ extern NSString *const kMXKRoomBubbleCellLongPressOnReactionView; /** Action identifier used when the user pressed accept button for an incoming key verification request. The `userInfo` dictionary contains an `NSString` object under the `kMXKRoomBubbleCellEventIdKey` key, representing the event id associated to the key verification request. */ extern NSString *const kMXKRoomBubbleCellKeyVerificationIncomingRequestAcceptPressed; /** Action identifier used when the user pressed decline button for an incoming key verification request. The `userInfo` dictionary contains an `NSString` object under the `kMXKRoomBubbleCellEventIdKey` key, representing the event id associated to the key verification request. */ extern NSString *const kMXKRoomBubbleCellKeyVerificationIncomingRequestDeclinePressed; /** Define a `MXKRoomBubbleTableViewCell` category at Riot level to handle bubble customisation. */ @interface MXKRoomBubbleTableViewCell (Riot) /** Add timestamp label for a component in receiver. Note: The label added here is automatically removed when [didEndDisplay] is called. @param componentIndex index of the component in bubble message data */ - (void)addTimestampLabelForComponent:(NSUInteger)componentIndex; /** Add timestamp label for a component in receiver. Note: The label added here is automatically removed when [didEndDisplay] is called. @param componentIndex index of the component in bubble message data @param displayOnLeft Indicate true to display label on left and false to display on right */ - (void)addTimestampLabelForComponent:(NSUInteger)componentIndex displayOnLeft:(BOOL)displayOnLeft; /** Highlight a component in receiver. @param componentIndex index of the component in bubble message data */ - (void)selectComponent:(NSUInteger)componentIndex; /** Highlight a component in receiver and show or not edit button. @param componentIndex index of the component in bubble message data @param showEditButton true to show edit button @param showTimestamp true to show timestamp label */ - (void)selectComponent:(NSUInteger)componentIndex showEditButton:(BOOL)showEditButton showTimestamp:(BOOL)showTimestamp; /** Mark a component in receiver. @param componentIndex index of the component in bubble message data */ - (void)markComponent:(NSUInteger)componentIndex; /** Add a label to display the date of the cell. */ - (void)addDateLabel; /** Called when the user taps on the Receipt Container. */ - (IBAction)onReceiptContainerTap:(UITapGestureRecognizer *)sender; /** Update username label color based on bubble data sender ID. */ - (void)updateUserNameColor; /** Calculate component frame in table view. @param componentIndex index of the component in bubble message data @return component frame in table view if component exist or CGRectNull. */ - (CGRect)componentFrameInTableViewForIndex:(NSInteger)componentIndex; /** Calculate surrounding component frame in table view. This frame goes over user name for first visible component for example. @param componentIndex index of the component in bubble message data @return Component surrounding frame in table view if component exist or CGRectNull. */ - (CGRect)surroundingFrameInTableViewForComponentIndex:(NSInteger)componentIndex; /** Calculate the component frame in the contentView of the tableview cell. @param componentIndex index of the component in bubble message data @return component frame in the contentView if the component exists or CGRectNull. */ - (CGRect)componentFrameInContentViewForIndex:(NSInteger)componentIndex; /** Give the correct cell height for a bubble cell with an attachment view. Handle reactions and read receipts views. @param cellData The data object to render. @param maxWidth The maximum available width. @return The cell height. */ + (CGFloat)attachmentBubbleCellHeightForCellData:(MXKCellData *)cellData withMaximumWidth:(CGFloat)maxWidth; - (IBAction)onProgressLongPressGesture:(UILongPressGestureRecognizer*)recognizer; /** update tick view(s) according to the current sent state. */ - (void)updateTickViewWithFailedEventIds:(NSSet *)failedEventIds; /** Blur the view by adding a transparent overlay. Default is NO. */ @property(nonatomic) BOOL blurred; /** The 'edit' button displayed at in the top-right corner of the selected component (if any). Default is nil. */ @property(nonatomic) UIButton *editButton; /** The marker view displayed in front of the marked component (if any). */ @property (nonatomic) UIView *markerView; /** Message tick views (sending, sent) displayed alongside the related component. */ @property (nonatomic) NSArray *messageStatusViews; @end