diff --git a/CMakeLists.txt b/CMakeLists.txt index 7c5fc9f9658266df618e035ce1185720774d4f56..902723ebf141d8b0476f04fd1bae143b259974fa 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -265,6 +265,7 @@ SET(ringclient_XIBS ContactRequest AccBannedContacts PasswordChange + MessageCells ) # Icons @@ -274,6 +275,7 @@ SET_SOURCE_FILES_PROPERTIES(${myApp_ICON} PROPERTIES MACOSX_PACKAGE_LOCATION Resources) SET(ring_ICONS +${CMAKE_CURRENT_SOURCE_DIR}/data/dark/ic_attachment.png ${CMAKE_CURRENT_SOURCE_DIR}/data/default_avatar_overlay.png ${CMAKE_CURRENT_SOURCE_DIR}/data/symbol_name.png ${CMAKE_CURRENT_SOURCE_DIR}/data/background-light.png diff --git a/data/dark/ic_attachment.png b/data/dark/ic_attachment.png new file mode 100644 index 0000000000000000000000000000000000000000..bf0a53bed29513c320900ecb7126f27727593d8e Binary files /dev/null and b/data/dark/ic_attachment.png differ diff --git a/src/ChatVC.mm b/src/ChatVC.mm index 5a3a9ed715ee41c3c7d5b471995fbfb9cda4da36..895e02c4160b6ec7e213fceb5b9c561d9befb611 100644 --- a/src/ChatVC.mm +++ b/src/ChatVC.mm @@ -69,7 +69,6 @@ convModel_->sendMessage(convUid_, std::string([text UTF8String])); self.message = @""; [messageField setStringValue:@""]; - [messagesViewVC newMessageSent]; } } diff --git a/src/ConversationVC.mm b/src/ConversationVC.mm index e5bfcc6a40b37f7d60e7717c19b4b20805822968..4061e663fe416da071c40790f750e2b3385d2bc6 100644 --- a/src/ConversationVC.mm +++ b/src/ConversationVC.mm @@ -96,7 +96,7 @@ if (cachedConv_ != nil) return cachedConv_; - auto& convQueue = convModel_->allFilteredConversations(); + auto convQueue = convModel_->allFilteredConversations(); auto it = getConversationFromUid(convUid_, *convModel_); @@ -202,7 +202,6 @@ self.message = @""; if (isPending) [delegate currentConversationTrusted]; - [messagesViewVC newMessageSent]; } } diff --git a/src/MessagesVC.h b/src/MessagesVC.h index 8ce35c5ec6df5c1074dcb8e30f3af3621b8fdee4..f88b1e9a5904d7c33cf04f1886792fed5e9d57a5 100644 --- a/src/MessagesVC.h +++ b/src/MessagesVC.h @@ -30,7 +30,6 @@ @interface MessagesVC : NSViewController -(void)setConversationUid:(const std::string)convUid model:(lrc::api::ConversationModel*)model; --(void)newMessageSent; @property (retain, nonatomic) id <MessagesVCDelegate> delegate; diff --git a/src/MessagesVC.mm b/src/MessagesVC.mm index 48921376ad1fde1023f349a07b8a5f6d57e36291..7e72acab18c46817bc773680bfbaba5e8ab8c329 100644 --- a/src/MessagesVC.mm +++ b/src/MessagesVC.mm @@ -29,9 +29,12 @@ #import "MessagesVC.h" #import "views/IMTableCellView.h" #import "views/MessageBubbleView.h" +#import "views/NSImage+Extensions.h" #import "INDSequentialTextSelectionManager.h" #import "delegates/ImageManipulationDelegate.h" #import "utils.h" +#import "views/NSColor+RingTheme.h" + @interface MessagesVC () <NSTableViewDelegate, NSTableViewDataSource> { @@ -56,9 +59,37 @@ // Tags for view NSInteger const GENERIC_INT_TEXT_TAG = 100; +NSInteger const GENERIC_INT_TIME_TAG = 200; + +// views size +CGFloat const GENERIC_CELL_HEIGHT = 60; +CGFloat const TIME_BOX_HEIGHT = 34; +CGFloat const MESSAGE_TEXT_PADDING = 10; +CGFloat const MAX_TRANSFERED_IMAGE_SIZE = 250; +CGFloat const BUBBLE_HEIGHT_FOR_TRANSFERED_FILE = 87; @implementation MessagesVC +//MessageBuble type +typedef NS_ENUM(NSInteger, MessageSequencing) { + SINGLE_WITH_TIME = 0, + SINGLE_WITHOUT_TIME = 1, + FIRST_WITH_TIME = 2, + FIRST_WITHOUT_TIME = 3, + MIDDLE_IN_SEQUENCE = 5, + LAST_IN_SEQUENCE = 6, +}; + +- (void)awakeFromNib +{ + NSNib *cellNib = [[NSNib alloc] initWithNibNamed:@"MessageCells" bundle:nil]; + [conversationView registerNib:cellNib forIdentifier:@"LeftIncomingFileView"]; + [conversationView registerNib:cellNib forIdentifier:@"LeftOngoingFileView"]; + [conversationView registerNib:cellNib forIdentifier:@"LeftFinishedFileView"]; + [conversationView registerNib:cellNib forIdentifier:@"RightOngoingFileView"]; + [conversationView registerNib:cellNib forIdentifier:@"RightFinishedFileView"]; +} + -(const lrc::api::conversation::Info*) getCurrentConversation { if (convModel_ == nil || convUid_.empty()) @@ -67,16 +98,57 @@ NSInteger const GENERIC_INT_TEXT_TAG = 100; if (cachedConv_ != nil) return cachedConv_; - auto& convQueue = convModel_->allFilteredConversations(); - auto it = getConversationFromUid(convUid_, *convModel_); - - if (it != convQueue.end()) + if (it != convModel_->allFilteredConversations().end()) cachedConv_ = &(*it); return cachedConv_; } +-(void) reloadConversationForMessage:(uint64_t) uid shouldUpdateHeight:(bool)update { + auto* conv = [self getCurrentConversation]; + + if (conv == nil) + return; + auto it = distance(conv->interactions.begin(),conv->interactions.find(uid)); + NSIndexSet* indexSet = [NSIndexSet indexSetWithIndex:it]; + //reload previous message to update bubbleview + if (it > 0) { + NSRange range = NSMakeRange(it - 1, it); + indexSet = [NSIndexSet indexSetWithIndexesInRange:range]; + } + if (update) { + [conversationView noteHeightOfRowsWithIndexesChanged:indexSet]; + } + [conversationView reloadDataForRowIndexes: indexSet + columnIndexes:[NSIndexSet indexSetWithIndex:0]]; + if (update) { + [conversationView scrollToEndOfDocument:nil]; + } +} + +-(void) reloadConversationForMessage:(uint64_t) uid shouldUpdateHeight:(bool)update updateConversation:(bool) updateConversation { + auto* conv = [self getCurrentConversation]; + + if (conv == nil) + return; + auto it = distance(conv->interactions.begin(),conv->interactions.find(uid)); + NSIndexSet* indexSet = [NSIndexSet indexSetWithIndex:it]; + //reload previous message to update bubbleview + if (it > 0) { + NSRange range = NSMakeRange(it - 1, it); + indexSet = [NSIndexSet indexSetWithIndexesInRange:range]; + } + if (update) { + [conversationView noteHeightOfRowsWithIndexesChanged:indexSet]; + } + [conversationView reloadDataForRowIndexes: indexSet + columnIndexes:[NSIndexSet indexSetWithIndex:0]]; + if (update) { + [conversationView scrollToEndOfDocument:nil]; + } +} + -(void)setConversationUid:(const std::string)convUid model:(lrc::api::ConversationModel *)model { if (convUid_ == convUid && convModel_ == model) @@ -90,20 +162,42 @@ NSInteger const GENERIC_INT_TEXT_TAG = 100; QObject::disconnect(newInteractionSignal_); QObject::disconnect(interactionStatusUpdatedSignal_); newInteractionSignal_ = QObject::connect(convModel_, &lrc::api::ConversationModel::newInteraction, - [self](const std::string& uid, uint64_t interactionId, const lrc::api::interaction::Info& interaction){ - if (uid != convUid_) - return; - cachedConv_ = nil; - [conversationView reloadData]; - [conversationView scrollToEndOfDocument:nil]; - }); + [self](const std::string& uid, uint64_t interactionId, const lrc::api::interaction::Info& interaction){ + if (uid != convUid_) + return; + cachedConv_ = nil; + [conversationView noteNumberOfRowsChanged]; + [self reloadConversationForMessage:interactionId shouldUpdateHeight:YES]; + }); interactionStatusUpdatedSignal_ = QObject::connect(convModel_, &lrc::api::ConversationModel::interactionStatusUpdated, [self](const std::string& uid, uint64_t interactionId, const lrc::api::interaction::Info& interaction){ if (uid != convUid_) return; cachedConv_ = nil; - [conversationView reloadData]; - [conversationView scrollToEndOfDocument:nil]; + bool isOutgoing = lrc::api::interaction::isOutgoing(interaction); + if (interaction.type == lrc::api::interaction::Type::TEXT && isOutgoing) { + convModel_->refreshFilter(); + } + [self reloadConversationForMessage:interactionId shouldUpdateHeight:YES]; + //accept incoming transfer + if (interaction.type == lrc::api::interaction::Type::INCOMING_DATA_TRANSFER && + (interaction.status == lrc::api::interaction::Status::TRANSFER_AWAITING_HOST || + interaction.status == lrc::api::interaction::Status::TRANSFER_CREATED)) { + lrc::api::datatransfer::Info info = {}; + convModel_->getTransferInfo(interactionId, info); + double convertData = static_cast<double>(info.totalSize); + NSString* pathUrl = @(info.displayName.c_str()); + + NSString* fileExtension = pathUrl.pathExtension; + + CFStringRef utiType = UTTypeCreatePreferredIdentifierForTag( + kUTTagClassFilenameExtension, (__bridge CFStringRef)fileExtension, NULL); + + bool isImage = UTTypeConformsTo(utiType, kUTTypeImage); + if( convertData <= 10485760 && isImage) { + [self acceptFile:interactionId]; + } + } }); // Signals tracking changes in conversation list, we need them as cached conversation can be invalid @@ -118,84 +212,133 @@ NSInteger const GENERIC_INT_TEXT_TAG = 100; [self](){ cachedConv_ = nil; }); - - - [conversationView reloadData]; [conversationView scrollToEndOfDocument:nil]; } --(void)newMessageSent -{ - [conversationView reloadData]; - [conversationView scrollToEndOfDocument:nil]; -} +#pragma mark - configure cells --(NSTableCellView*) makeGenericInteractionViewForTableView:(NSTableView*)tableView withText:(NSString*)text +-(NSTableCellView*) makeGenericInteractionViewForTableView:(NSTableView*)tableView withText:(NSString*)text andTime:(NSString*) time { NSTableCellView* result = [tableView makeViewWithIdentifier:@"GenericInteractionView" owner:self]; NSTextField* textField = [result viewWithTag:GENERIC_INT_TEXT_TAG]; + NSTextField* timeField = [result viewWithTag:GENERIC_INT_TIME_TAG]; // TODO: Fix symbol in LRC NSString* fixedString = [text stringByReplacingOccurrencesOfString:@"🕽" withString:@"📞"]; [textField setStringValue:fixedString]; + [timeField setStringValue:time]; return result; } --(IMTableCellView*) makeViewforTransferStatus:(lrc::api::interaction::Status)status type:(lrc::api::interaction::Type)type tableView:(NSTableView*)tableView +-(NSTableCellView*) configureViewforTransfer:(lrc::api::interaction::Info)interaction interactionID: (uint64_t) interactionID tableView:(NSTableView*)tableView { IMTableCellView* result; + auto type = interaction.type; + auto status = interaction.status; + + NSString* fileName = @"incoming file"; + // First, view is created if (type == lrc::api::interaction::Type::INCOMING_DATA_TRANSFER) { switch (status) { case lrc::api::interaction::Status::TRANSFER_CREATED: - case lrc::api::interaction::Status::TRANSFER_AWAITING_HOST: - result = [tableView makeViewWithIdentifier:@"LeftIncomingFileView" owner:self]; - break; + case lrc::api::interaction::Status::TRANSFER_AWAITING_HOST: { + result = [tableView makeViewWithIdentifier:@"LeftIncomingFileView" owner: conversationView]; + [result.acceptButton setAction:@selector(acceptIncomingFile:)]; + [result.acceptButton setTarget:self]; + [result.declineButton setAction:@selector(declineIncomingFile:)]; + [result.declineButton setTarget:self]; + break;} case lrc::api::interaction::Status::TRANSFER_ACCEPTED: - case lrc::api::interaction::Status::TRANSFER_ONGOING: - result = [tableView makeViewWithIdentifier:@"LeftOngoingFileView" owner:self]; - [result.progressIndicator startAnimation:nil]; - break; + case lrc::api::interaction::Status::TRANSFER_ONGOING: { + result = [tableView makeViewWithIdentifier:@"LeftOngoingFileView" owner:conversationView]; + [result.progressIndicator startAnimation:conversationView]; + [result.declineButton setAction:@selector(declineIncomingFile:)]; + [result.declineButton setTarget:self]; + break;} case lrc::api::interaction::Status::TRANSFER_FINISHED: case lrc::api::interaction::Status::TRANSFER_CANCELED: case lrc::api::interaction::Status::TRANSFER_ERROR: - result = [tableView makeViewWithIdentifier:@"LeftFinishedFileView" owner:self]; + result = [tableView makeViewWithIdentifier:@"LeftFinishedFileView" owner:conversationView]; + break; } } else if (type == lrc::api::interaction::Type::OUTGOING_DATA_TRANSFER) { + NSString* fileName = @"sent file"; switch (status) { case lrc::api::interaction::Status::TRANSFER_CREATED: - case lrc::api::interaction::Status::TRANSFER_AWAITING_PEER: case lrc::api::interaction::Status::TRANSFER_ONGOING: + case lrc::api::interaction::Status::TRANSFER_AWAITING_PEER: case lrc::api::interaction::Status::TRANSFER_ACCEPTED: - result = [tableView makeViewWithIdentifier:@"RightOngoingFileView" owner:self]; + result = [tableView makeViewWithIdentifier:@"RightOngoingFileView" owner:conversationView]; [result.progressIndicator startAnimation:nil]; + [result.declineButton setAction:@selector(declineIncomingFile:)]; + [result.declineButton setTarget:self]; break; case lrc::api::interaction::Status::TRANSFER_FINISHED: case lrc::api::interaction::Status::TRANSFER_CANCELED: case lrc::api::interaction::Status::TRANSFER_ERROR: case lrc::api::interaction::Status::TRANSFER_UNJOINABLE_PEER: - result = [tableView makeViewWithIdentifier:@"RightFinishedFileView" owner:self]; + result = [tableView makeViewWithIdentifier:@"RightFinishedFileView" owner:conversationView]; } } // Then status label is updated if needed switch (status) { + [result.statusLabel setTextColor:[NSColor textColor]]; case lrc::api::interaction::Status::TRANSFER_FINISHED: + [result.statusLabel setTextColor:[NSColor greenColor]]; [result.statusLabel setStringValue:NSLocalizedString(@"Success", @"File transfer successful label")]; break; case lrc::api::interaction::Status::TRANSFER_CANCELED: + [result.statusLabel setTextColor:[NSColor orangeColor]]; [result.statusLabel setStringValue:NSLocalizedString(@"Canceled", @"File transfer canceled label")]; break; case lrc::api::interaction::Status::TRANSFER_ERROR: + [result.statusLabel setTextColor:[NSColor redColor]]; [result.statusLabel setStringValue:NSLocalizedString(@"Failed", @"File transfer failed label")]; break; case lrc::api::interaction::Status::TRANSFER_UNJOINABLE_PEER: + [result.statusLabel setTextColor:[NSColor textColor]]; [result.statusLabel setStringValue:NSLocalizedString(@"Unjoinable", @"File transfer peer unjoinable label")]; break; } + result.transferedImage.image = nil; + [result.msgBackground setHidden:NO]; + [result invalidateImageConstraints]; + NSString* name = @(interaction.body.c_str()); + if (name.length > 0) { + if (([name rangeOfString:@"/"].location != NSNotFound)) { + NSArray *listItems = [name componentsSeparatedByString:@"/"]; + NSString* name1 = listItems.lastObject; + fileName = name1; + } else { + fileName = name; + } + } + result.transferedFileName.stringValue = fileName; + if (status == lrc::api::interaction::Status::TRANSFER_FINISHED) { + NSImage* image = [self getImageForFilePath:name]; + if (([name rangeOfString:@"/"].location == NSNotFound)) { + image = [self getImageForFilePath:[self getDataTransferPath:interactionID]]; + } + if(image != nil) { + result.transferedImage.image = [image roundCorners:14]; + [result updateImageConstraint:image.size.width andHeight:image.size.height]; + } + } + [result setupForInteraction:interactionID]; + NSDate* msgTime = [NSDate dateWithTimeIntervalSince1970:interaction.timestamp]; + NSString* timeString = [self timeForMessage: msgTime]; + result.timeLabel.stringValue = timeString; + bool isOutgoing = lrc::api::interaction::isOutgoing(interaction); + if (!isOutgoing) { + auto& imageManip = reinterpret_cast<Interfaces::ImageManipulationDelegate&>(GlobalInstances::pixmapManipulator()); + auto* conv = [self getCurrentConversation]; + [result.photoView setImage:QtMac::toNSImage(qvariant_cast<QPixmap>(imageManip.conversationPhoto(*conv, convModel_->owner)))]; + } return result; } @@ -212,6 +355,7 @@ NSInteger const GENERIC_INT_TEXT_TAG = 100; - (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row { + auto* conv = [self getCurrentConversation]; if (conv == nil) @@ -222,9 +366,7 @@ NSInteger const GENERIC_INT_TEXT_TAG = 100; std::advance(it, row); IMTableCellView* result; - - auto& interaction = it->second; - + auto interaction = it->second; bool isOutgoing = lrc::api::interaction::isOutgoing(interaction); switch (interaction.type) { @@ -239,53 +381,70 @@ NSInteger const GENERIC_INT_TEXT_TAG = 100; break; case lrc::api::interaction::Type::INCOMING_DATA_TRANSFER: case lrc::api::interaction::Type::OUTGOING_DATA_TRANSFER: - result = [self makeViewforTransferStatus:interaction.status type:interaction.type tableView:tableView]; + return [self configureViewforTransfer:interaction interactionID: it->first tableView:tableView]; break; case lrc::api::interaction::Type::CONTACT: - case lrc::api::interaction::Type::CALL: - return [self makeGenericInteractionViewForTableView:tableView withText:@(interaction.body.c_str())]; + case lrc::api::interaction::Type::CALL: { + NSDate* msgTime = [NSDate dateWithTimeIntervalSince1970:interaction.timestamp]; + NSString* timeString = [self timeForMessage: msgTime]; + return [self makeGenericInteractionViewForTableView:tableView withText:@(interaction.body.c_str()) andTime:timeString]; + } default: // If interaction is not of a known type return nil; } - - // check if the message first in incoming or outgoing messages sequence - Boolean isFirstInSequence = true; - if (it != conv->interactions.begin()) { - auto previousIt = it; - previousIt--; - auto& previousInteraction = previousIt->second; - if ((previousInteraction.type == lrc::api::interaction::Type::TEXT - || previousInteraction.type == lrc::api::interaction::Type::INCOMING_DATA_TRANSFER - || previousInteraction.type == lrc::api::interaction::Type::OUTGOING_DATA_TRANSFER) && (isOutgoing == lrc::api::interaction::isOutgoing(previousInteraction))) - isFirstInSequence = false; - } - [result.photoView setHidden:!isFirstInSequence]; - result.msgBackground.needPointer = isFirstInSequence; + MessageSequencing sequence = [self computeSequencingFor:row]; + BubbleType type = SINGLE; + if (sequence == FIRST_WITHOUT_TIME || sequence == FIRST_WITH_TIME) { + type = FIRST; + } + if (sequence == MIDDLE_IN_SEQUENCE) { + type = MIDDLE; + } + if (sequence == LAST_IN_SEQUENCE) { + type = LAST; + } + result.msgBackground.type = type; [result setupForInteraction:it->first]; + bool shouldDisplayTime = (sequence == FIRST_WITH_TIME || sequence == SINGLE_WITH_TIME) ? YES : NO; + [result.msgBackground setNeedsDisplay:YES]; + [result setNeedsDisplay:YES]; + [result.timeBox setNeedsDisplay:YES]; NSMutableAttributedString* msgAttString = - [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"%@\n",@(interaction.body.c_str())] + [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"%@",@(interaction.body.c_str())] attributes:[self messageAttributes]]; - NSDate *msgTime = [NSDate dateWithTimeIntervalSince1970:interaction.timestamp]; - NSAttributedString* timestampAttrString = - [[NSAttributedString alloc] initWithString:[NSDateFormatter localizedStringFromDate:msgTime dateStyle:NSDateFormatterMediumStyle timeStyle:NSDateFormatterMediumStyle] - attributes:[self timestampAttributes]]; - - CGFloat finalWidth = MAX(msgAttString.size.width, timestampAttrString.size.width); + CGSize messageSize = [self sizeFor: @(interaction.body.c_str()) maxWidth:tableView.frame.size.width * 0.7]; - finalWidth = MIN(finalWidth + 30, tableView.frame.size.width * 0.7); - - [msgAttString appendAttributedString:timestampAttrString]; + [result updateMessageConstraint:messageSize.width andHeight:messageSize.height timeIsVisible:shouldDisplayTime]; [[result.msgView textStorage] appendAttributedString:msgAttString]; [result.msgView checkTextInDocument:nil]; - [result updateWidthConstraint:finalWidth]; - auto& imageManip = reinterpret_cast<Interfaces::ImageManipulationDelegate&>(GlobalInstances::pixmapManipulator()); - if (!isOutgoing) { - [result.photoView setImage:QtMac::toNSImage(qvariant_cast<QPixmap>(imageManip.conversationPhoto(*conv, convModel_->owner)))]; + if (shouldDisplayTime) { + NSDate* msgTime = [NSDate dateWithTimeIntervalSince1970:interaction.timestamp]; + NSString* timeString = [self timeForMessage: msgTime]; + result.timeLabel.stringValue = timeString; } + bool shouldDisplayAvatar = (sequence != MIDDLE_IN_SEQUENCE && sequence != FIRST_WITHOUT_TIME + && sequence != FIRST_WITH_TIME) ? YES : NO; + [result.photoView setHidden:!shouldDisplayAvatar]; + if (!isOutgoing && shouldDisplayAvatar) { + auto& imageManip = reinterpret_cast<Interfaces::ImageManipulationDelegate&>(GlobalInstances::pixmapManipulator()); + [result.photoView setImage:QtMac::toNSImage(qvariant_cast<QPixmap>(imageManip.conversationPhoto(*conv, convModel_->owner)))]; + } + [result.messageStatus setHidden:YES]; + if (interaction.type == lrc::api::interaction::Type::TEXT && isOutgoing) { + if (interaction.status == lrc::api::interaction::Status::SENDING) { + [result.messageStatus setHidden:NO]; + [result.sendingMessageIndicator startAnimation:nil]; + [result.messageFailed setHidden:YES]; + } else if (interaction.status == lrc::api::interaction::Status::FAILED) { + [result.messageStatus setHidden:NO]; + [result.sendingMessageIndicator setHidden:YES]; + [result.messageFailed setHidden:NO]; + } + } return result; } @@ -302,41 +461,195 @@ NSInteger const GENERIC_INT_TEXT_TAG = 100; std::advance(it, row); - auto& interaction = it->second; + auto interaction = it->second; + + MessageSequencing sequence = [self computeSequencingFor:row]; - if(interaction.type == lrc::api::interaction::Type::INCOMING_DATA_TRANSFER || interaction.type == lrc::api::interaction::Type::OUTGOING_DATA_TRANSFER) - return 52.0; + bool shouldDisplayTime = (sequence == FIRST_WITH_TIME || sequence == SINGLE_WITH_TIME) ? YES : NO; + + + if(interaction.type == lrc::api::interaction::Type::INCOMING_DATA_TRANSFER || interaction.type == lrc::api::interaction::Type::OUTGOING_DATA_TRANSFER) { + + if( interaction.status == lrc::api::interaction::Status::TRANSFER_FINISHED) { + NSString* name = @(interaction.body.c_str()); + NSImage* image = [self getImageForFilePath:name]; + if (([name rangeOfString:@"/"].location == NSNotFound)) { + image = [self getImageForFilePath:[self getDataTransferPath:it->first]]; + } + if (image != nil) { + return image.size.height + TIME_BOX_HEIGHT; + } + } + return BUBBLE_HEIGHT_FOR_TRANSFERED_FILE + TIME_BOX_HEIGHT; + } if(interaction.type == lrc::api::interaction::Type::CONTACT || interaction.type == lrc::api::interaction::Type::CALL) - return 27.0; + return GENERIC_CELL_HEIGHT; // TODO Implement interactions other than messages if(interaction.type != lrc::api::interaction::Type::TEXT) { return 0; } - NSMutableAttributedString* msgAttString = - [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"%@\n",@(interaction.body.c_str())] - attributes:[self messageAttributes]]; + CGSize messageSize = [self sizeFor: @(interaction.body.c_str()) maxWidth:tableView.frame.size.width * 0.7]; + CGFloat singleLignMessageHeight = 15; + + if (shouldDisplayTime) { + return MAX(messageSize.height + TIME_BOX_HEIGHT + MESSAGE_TEXT_PADDING * 2, + TIME_BOX_HEIGHT + MESSAGE_TEXT_PADDING * 2 + singleLignMessageHeight); + } + return MAX(messageSize.height + MESSAGE_TEXT_PADDING * 2, + singleLignMessageHeight + MESSAGE_TEXT_PADDING * 2); +} - NSDate *msgTime = [NSDate dateWithTimeIntervalSince1970:interaction.timestamp]; - NSAttributedString* timestampAttrString = - [[NSAttributedString alloc] initWithString:[NSDateFormatter localizedStringFromDate:msgTime dateStyle:NSDateFormatterMediumStyle timeStyle:NSDateFormatterMediumStyle] - attributes:[self timestampAttributes]]; +#pragma mark - message view parameters - [msgAttString appendAttributedString:timestampAttrString]; +-(NSString *) getDataTransferPath:(uint64_t)interactionId { + lrc::api::datatransfer::Info info = {}; + convModel_->getTransferInfo(interactionId, info); + double convertData = static_cast<double>(info.totalSize); + return @(info.path.c_str()); +} + +-(NSImage*) getImageForFilePath: (NSString *) path { + if (path.length <= 0) {return nil;} + if (![[NSFileManager defaultManager] fileExistsAtPath: path]) {return nil;} + NSImage* transferedImage = [[NSImage alloc] initWithContentsOfFile: path]; + if(transferedImage != nil) { + return [transferedImage imageResizeInsideMax: MAX_TRANSFERED_IMAGE_SIZE]; + } + return nil; +} - [msgAttString appendAttributedString:timestampAttrString]; +-(CGSize) sizeFor:(NSString *) message maxWidth:(CGFloat) width { + CGFloat horizaontalMargin = 6; + NSMutableAttributedString* msgAttString = + [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"%@", message] + attributes:[self messageAttributes]]; - NSRect frame = NSMakeRect(0, 0, someWidth, MAXFLOAT); + CGFloat finalWidth = MIN(msgAttString.size.width + horizaontalMargin * 2, width); + NSRect frame = NSMakeRect(0, 0, finalWidth, msgAttString.size.height); NSTextView *tv = [[NSTextView alloc] initWithFrame:frame]; - [tv setEnabledTextCheckingTypes:NSTextCheckingTypeLink]; - [tv setAutomaticLinkDetectionEnabled:YES]; [[tv textStorage] setAttributedString:msgAttString]; [tv sizeToFit]; + return tv.frame.size; +} + +-(MessageSequencing) computeSequencingFor:(NSInteger) row { + auto* conv = [self getCurrentConversation]; + if (conv == nil) + return SINGLE_WITHOUT_TIME; + auto it = conv->interactions.begin(); + std::advance(it, row); + auto interaction = it->second; + if (interaction.type != lrc::api::interaction::Type::TEXT) { + return SINGLE_WITH_TIME; + } + if (row == 0) { + if (it == conv->interactions.end()) { + return SINGLE_WITH_TIME; + } + auto nextIt = it; + nextIt++; + auto nextInteraction = nextIt->second; + if ([self sequenceChangedFrom:interaction to: nextInteraction]) { + return SINGLE_WITH_TIME; + } + return FIRST_WITH_TIME; + } + + if (row == conversationView.numberOfRows - 1) { + if(it == conv->interactions.begin()) { + return SINGLE_WITH_TIME; + } + auto previousIt = it; + previousIt--; + auto previousInteraction = previousIt->second; + bool timeChanged = [self sequenceTimeChangedFrom:interaction to:previousInteraction]; + bool authorChanged = [self sequenceAuthorChangedFrom:interaction to:previousInteraction]; + if (!timeChanged && !authorChanged) { + return LAST_IN_SEQUENCE; + } + if (!timeChanged && authorChanged) { + return SINGLE_WITHOUT_TIME; + } + return SINGLE_WITH_TIME; + } + if(it == conv->interactions.begin() || it == conv->interactions.end()) { + return SINGLE_WITH_TIME; + } + auto previousIt = it; + previousIt--; + auto previousInteraction = previousIt->second; + auto nextIt = it; + nextIt++; + auto nextInteraction = nextIt->second; + + bool timeChanged = [self sequenceTimeChangedFrom:interaction to:previousInteraction]; + bool authorChanged = [self sequenceAuthorChangedFrom:interaction to:previousInteraction]; + bool sequenceWillChange = [self sequenceChangedFrom:interaction to: nextInteraction]; + if (!sequenceWillChange) { + if (!timeChanged && !authorChanged) { + return MIDDLE_IN_SEQUENCE; + } + if (timeChanged) { + return FIRST_WITH_TIME; + } + return FIRST_WITHOUT_TIME; + } if (!timeChanged && !authorChanged) { + return LAST_IN_SEQUENCE; + } if (timeChanged) { + return SINGLE_WITH_TIME; + } + return SINGLE_WITHOUT_TIME; +} + +-(bool) sequenceChangedFrom:(lrc::api::interaction::Info) firstInteraction to:(lrc::api::interaction::Info) secondInteraction { + return ([self sequenceTimeChangedFrom:firstInteraction to:secondInteraction] || [self sequenceAuthorChangedFrom:firstInteraction to:secondInteraction]); +} + +-(bool) sequenceTimeChangedFrom:(lrc::api::interaction::Info) firstInteraction to:(lrc::api::interaction::Info) secondInteraction { + bool timeChanged = NO; + NSDate* firstMessageTime = [NSDate dateWithTimeIntervalSince1970:firstInteraction.timestamp]; + NSDate* secondMessageTime = [NSDate dateWithTimeIntervalSince1970:secondInteraction.timestamp]; + bool hourComp = [[NSCalendar currentCalendar] compareDate:firstMessageTime toDate:secondMessageTime toUnitGranularity:NSCalendarUnitHour]; + bool minutComp = [[NSCalendar currentCalendar] compareDate:firstMessageTime toDate:secondMessageTime toUnitGranularity:NSCalendarUnitMinute]; + if(hourComp != NSOrderedSame || minutComp != NSOrderedSame) { + timeChanged = YES; + } + return timeChanged; +} + +-(bool) sequenceAuthorChangedFrom:(lrc::api::interaction::Info) firstInteraction to:(lrc::api::interaction::Info) secondInteraction { + bool authorChanged = YES; + bool isOutgoing = lrc::api::interaction::isOutgoing(firstInteraction); + if ((secondInteraction.type == lrc::api::interaction::Type::TEXT) && (isOutgoing == lrc::api::interaction::isOutgoing(secondInteraction))) { + authorChanged = NO; + } + return authorChanged; +} - double height = tv.frame.size.height + 10; - return MAX(height, 50.0f); +-(NSString *)timeForMessage:(NSDate*) msgTime { + NSDate *today = [NSDate date]; + NSDateFormatter *dateFormatter=[[NSDateFormatter alloc] init]; + if ([[NSCalendar currentCalendar] compareDate:today + toDate:msgTime + toUnitGranularity:NSCalendarUnitYear]!= NSOrderedSame) { + return [NSDateFormatter localizedStringFromDate:msgTime dateStyle:NSDateFormatterMediumStyle timeStyle:NSDateFormatterMediumStyle]; + } + + if ([[NSCalendar currentCalendar] compareDate:today + toDate:msgTime + toUnitGranularity:NSCalendarUnitDay]!= NSOrderedSame || + [[NSCalendar currentCalendar] compareDate:today + toDate:msgTime + toUnitGranularity:NSCalendarUnitMonth]!= NSOrderedSame) { + [dateFormatter setDateFormat:@"MMM dd, HH:mm"]; + return [dateFormatter stringFromDate:msgTime]; + } + + [dateFormatter setDateFormat:@"HH:mm"]; + return [dateFormatter stringFromDate:msgTime]; } #pragma mark - NSTableViewDataSource @@ -353,25 +666,11 @@ NSInteger const GENERIC_INT_TEXT_TAG = 100; #pragma mark - Text formatting -- (NSMutableDictionary*) timestampAttributes -{ - NSMutableDictionary* attrs = [NSMutableDictionary dictionary]; - attrs[NSForegroundColorAttributeName] = [NSColor grayColor]; - NSFont* systemFont = [NSFont systemFontOfSize:12.0f]; - attrs[NSFontAttributeName] = systemFont; - attrs[NSParagraphStyleAttributeName] = [self paragraphStyle]; - - return attrs; -} - - (NSMutableDictionary*) messageAttributes { NSMutableDictionary* attrs = [NSMutableDictionary dictionary]; - attrs[NSForegroundColorAttributeName] = [NSColor blackColor]; - NSFont* systemFont = [NSFont systemFontOfSize:14.0f]; - attrs[NSFontAttributeName] = systemFont; + attrs[NSForegroundColorAttributeName] = [NSColor labelColor]; attrs[NSParagraphStyleAttributeName] = [self paragraphStyle]; - return attrs; } @@ -388,22 +687,29 @@ NSInteger const GENERIC_INT_TEXT_TAG = 100; Line break mode NSLineBreakByWordWrapping All others 0.0 */ - NSMutableParagraphStyle* aMutableParagraphStyle = - [[NSParagraphStyle defaultParagraphStyle] mutableCopy]; - - // Now adjust our NSMutableParagraphStyle formatting to be whatever we want. - // The numeric values below are in points (72 points per inch) - [aMutableParagraphStyle setLineSpacing:1.5]; - [aMutableParagraphStyle setParagraphSpacing:5.0]; - [aMutableParagraphStyle setHeadIndent:5.0]; - [aMutableParagraphStyle setTailIndent:-5.0]; - [aMutableParagraphStyle setFirstLineHeadIndent:5.0]; - return aMutableParagraphStyle; + NSMutableParagraphStyle* aMutableParagraphStyle = + [[NSParagraphStyle defaultParagraphStyle] mutableCopy]; + [aMutableParagraphStyle setHeadIndent:1.0]; + [aMutableParagraphStyle setFirstLineHeadIndent:1.0]; + return aMutableParagraphStyle; +} + +- (void)acceptFile:(uint64_t)interactionID { + NSURL *downloadsURL = [[NSFileManager defaultManager] + URLForDirectory:NSDownloadsDirectory + inDomain:NSUserDomainMask appropriateForURL:nil + create:YES error:nil]; + auto& inter = [self getCurrentConversation]->interactions.find(interactionID)->second; + if (convModel_ && !convUid_.empty()) { + NSURL *bUrl = [downloadsURL URLByAppendingPathComponent:@(inter.body.c_str())]; + const char* fullPath = [bUrl fileSystemRepresentation]; + convModel_->acceptTransfer(convUid_, interactionID, fullPath); + } } #pragma mark - Actions -- (IBAction)acceptIncomingFile:(id)sender { +- (void)acceptIncomingFile:(id)sender { auto interId = [(IMTableCellView*)[[sender superview] superview] interaction]; auto& inter = [self getCurrentConversation]->interactions.find(interId)->second; if (convModel_ && !convUid_.empty()) { @@ -417,7 +723,7 @@ NSInteger const GENERIC_INT_TEXT_TAG = 100; } } -- (IBAction)declineIncomingFile:(id)sender { +- (void)declineIncomingFile:(id)sender { auto inter = [(IMTableCellView*)[[sender superview] superview] interaction]; if (convModel_ && !convUid_.empty()) { convModel_->cancelTransfer(convUid_, inter); diff --git a/src/views/IMTableCellView.h b/src/views/IMTableCellView.h index e9b5cde52121547a69c2ad3bdd99534cae7b28d6..865bd6ade49013972011fec4126d467556818349 100644 --- a/src/views/IMTableCellView.h +++ b/src/views/IMTableCellView.h @@ -30,10 +30,19 @@ @property (nonatomic, strong) IBOutlet NSButton* declineButton; @property (nonatomic, strong) IBOutlet NSProgressIndicator* progressIndicator; @property (nonatomic, strong) IBOutlet NSTextField* statusLabel; +@property (nonatomic, strong) IBOutlet NSBox* timeBox; +@property (nonatomic, strong) IBOutlet NSTextField* timeLabel; +@property (nonatomic, strong) IBOutlet NSTextField* transferedFileName; +@property (nonatomic, strong) IBOutlet NSImageView* transferedImage; +@property (nonatomic, strong) IBOutlet NSProgressIndicator* sendingMessageIndicator; +@property (nonatomic, strong) IBOutlet NSTextField* messageFailed; +@property (nonatomic, strong) IBOutlet NSView* messageStatus; - (uint64_t) interaction; - (void) setupForInteraction:(uint64_t)inter; -- (void) updateWidthConstraint:(CGFloat) newWidth; +- (void) updateMessageConstraint:(CGFloat) width andHeight: (CGFloat) height timeIsVisible: (bool) visible; +- (void) updateImageConstraint: (CGFloat) width andHeight: (CGFloat) height; +- (void) invalidateImageConstraints; @end diff --git a/src/views/IMTableCellView.mm b/src/views/IMTableCellView.mm index 2d86cc95f7d97d142d412dd28e71fa0cfb9b19c9..365837d625f90eb0f343a2485b36ac330e2f1f2f 100644 --- a/src/views/IMTableCellView.mm +++ b/src/views/IMTableCellView.mm @@ -25,7 +25,10 @@ uint64_t interaction; } -@synthesize msgView; +NSString* const MESSAGE_MARGIN = @"10"; +NSString* const TIME_BOX_HEIGHT = @"34"; + +@synthesize msgView, msgBackground, timeBox, transferedImage; @synthesize photoView; @synthesize acceptButton; @synthesize declineButton; @@ -50,34 +53,74 @@ [self setupDirection]; [self.msgView setBackgroundColor:[NSColor clearColor]]; [self.msgView setString:@""]; - [self.msgView setAutoresizingMask:NSViewWidthSizable]; - [self.msgView setAutoresizingMask:NSViewHeightSizable]; - [self.msgBackground setAutoresizingMask:NSViewWidthSizable]; - [self.msgBackground setAutoresizingMask:NSViewHeightSizable]; + [self.msgView setTranslatesAutoresizingMaskIntoConstraints:NO]; + [self.msgBackground setTranslatesAutoresizingMaskIntoConstraints:NO]; [self.msgView setEnabledTextCheckingTypes:NSTextCheckingTypeLink]; [self.msgView setAutomaticLinkDetectionEnabled:YES]; [self.msgView setEditable:NO]; - if ([self.identifier containsString:@"Message"]) { - [self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-5-[msgView]" - options:0 - metrics:nil - views:NSDictionaryOfVariableBindings(msgView)]]; - } } -- (void) updateWidthConstraint:(CGFloat) newWidth +- (void) updateMessageConstraint:(CGFloat) width andHeight: (CGFloat) height timeIsVisible: (bool) visible { - [self.msgView removeConstraints:[self.msgView constraints]]; - NSLayoutConstraint* constraint = [NSLayoutConstraint - constraintWithItem:self.msgView - attribute:NSLayoutAttributeWidth - relatedBy:NSLayoutRelationEqual - toItem: nil - attribute:NSLayoutAttributeWidth - multiplier:1.0f - constant:newWidth]; + [NSLayoutConstraint deactivateConstraints:[self.msgView constraints]]; + [NSLayoutConstraint deactivateConstraints:[self.timeBox constraints]]; + NSString* formatWidth = [NSString stringWithFormat:@"H:|-%@-[msgView(==%@)]-%@-|", + MESSAGE_MARGIN,[NSString stringWithFormat:@"%f", width], + MESSAGE_MARGIN]; + NSString* formatHeight = [NSString stringWithFormat:@"V:[msgView(==%@)]", + [NSString stringWithFormat:@"%f", height]]; + + NSArray* constraintsMessageHorizontal = [NSLayoutConstraint + constraintsWithVisualFormat:formatWidth + options:NSLayoutFormatAlignAllCenterY + metrics:nil views:NSDictionaryOfVariableBindings(msgView)]; + NSArray* constraintsMessageVertical = [NSLayoutConstraint + constraintsWithVisualFormat:formatHeight + options:0 + metrics:nil views:NSDictionaryOfVariableBindings(msgView)]; + + NSLayoutConstraint* centerMessageConstraint =[NSLayoutConstraint constraintWithItem:msgView + attribute:NSLayoutAttributeCenterY + relatedBy:NSLayoutRelationEqual + toItem:msgView.superview + attribute:NSLayoutAttributeCenterY + multiplier:1.f constant:0.f]; + + NSString* formatTime = [NSString stringWithFormat:@"V:[timeBox(%@)]", TIME_BOX_HEIGHT]; + [self.timeBox setHidden:NO]; + if (!visible) { + formatTime = [NSString stringWithFormat:@"V:[timeBox(1)]"]; + [self.timeBox setHidden:YES]; + } + NSArray* constraintsVerticalTimeBox = [NSLayoutConstraint + constraintsWithVisualFormat:formatTime + options:0 + metrics:nil views:NSDictionaryOfVariableBindings(timeBox)]; + NSArray* constraints = [[[constraintsMessageHorizontal arrayByAddingObjectsFromArray:constraintsMessageVertical] + arrayByAddingObject:centerMessageConstraint] arrayByAddingObjectsFromArray:constraintsVerticalTimeBox]; + [NSLayoutConstraint activateConstraints:constraints]; +} + +- (void) updateImageConstraint: (CGFloat) width andHeight: (CGFloat) height { + [NSLayoutConstraint deactivateConstraints:[self.transferedImage constraints]]; + [self.msgBackground setHidden:YES]; + NSString* formatHeight = [NSString stringWithFormat:@"V:[transferedImage(==%@)]",[NSString stringWithFormat:@"%f", height]]; + NSString* formatWidth = [NSString stringWithFormat: + @"H:[transferedImage(==%@)]",[NSString stringWithFormat:@"%f", width]]; + NSArray* constraintsHorizontal = [NSLayoutConstraint + constraintsWithVisualFormat:formatWidth + options:0 + metrics:nil views:NSDictionaryOfVariableBindings(transferedImage)]; + NSArray* constraintsVertical = [NSLayoutConstraint + constraintsWithVisualFormat:formatHeight + options:0 + metrics:nil views:NSDictionaryOfVariableBindings(transferedImage)]; + NSArray* constraints =[constraintsHorizontal arrayByAddingObjectsFromArray:constraintsVertical] ; + [NSLayoutConstraint activateConstraints:constraintsHorizontal]; +} - [self.msgView addConstraint:constraint]; +- (void) invalidateImageConstraints { +[NSLayoutConstraint deactivateConstraints:[self.transferedImage constraints]]; } - (uint64_t)interaction diff --git a/src/views/MessageBubbleView.h b/src/views/MessageBubbleView.h index 7b87c859d7105f92a0499dc93d2142ed0d3cc9bb..339d0857c88c469fd984c9db8cb914da8521b2dd 100644 --- a/src/views/MessageBubbleView.h +++ b/src/views/MessageBubbleView.h @@ -24,11 +24,23 @@ typedef NS_ENUM(NSInteger, PointerDirection) { RIGHT, BLOCK, }; +typedef NS_ENUM(NSInteger, BubbleType) { + SINGLE = 0, + FIRST = 1, + MIDDLE = 2, + LAST = 3, +}; @interface MessageBubbleView: NSView - +/* + * Background color of the bubble + */ @property NSColor* bgColor; -@property Boolean needPointer; +@property BubbleType type; @property enum PointerDirection pointerDirection; +/* + * Radius value for rounded corner. Default is 12 + */ +@property CGFloat cornerRadius; @end diff --git a/src/views/MessageBubbleView.mm b/src/views/MessageBubbleView.mm index feadb8ae0bc592a28585da39035c0cd0d28ec745..78ce35a6aca050ceb954103f96c652ee5b451112 100644 --- a/src/views/MessageBubbleView.mm +++ b/src/views/MessageBubbleView.mm @@ -28,46 +28,83 @@ [super drawRect:dirtyRect]; CGContextRef context = (CGContextRef) [[NSGraphicsContext currentContext] graphicsPort]; CGContextSetRGBFillColor(context, 1, 1, 1, 1); - CGFloat radius = 6; - CGFloat minx = CGRectGetMinX(dirtyRect), midx = CGRectGetMidX(dirtyRect), maxx = CGRectGetMaxX(dirtyRect); - CGFloat miny = CGRectGetMinY(dirtyRect), midy = CGRectGetMidY(dirtyRect), maxy = CGRectGetMaxY(dirtyRect); + CGFloat defaultRadius = 16; + CGFloat radius = (self.cornerRadius) ? self.cornerRadius : defaultRadius; + CGFloat minx = CGRectGetMinX(dirtyRect); + CGFloat midx = CGRectGetMidX(dirtyRect); + CGFloat maxx = CGRectGetMaxX(dirtyRect); + CGFloat miny = CGRectGetMinY(dirtyRect); + CGFloat midy = CGRectGetMidY(dirtyRect); + CGFloat maxy = CGRectGetMaxY(dirtyRect); CGMutablePathRef outlinePath = CGPathCreateMutable(); - if (self.pointerDirection == LEFT) { - minx += 6; - CGPathMoveToPoint(outlinePath, nil, midx, miny); - CGPathAddArcToPoint(outlinePath, nil, maxx, miny, maxx, midy, radius); - CGPathAddArcToPoint(outlinePath, nil, maxx, maxy, midx, maxy, radius); - CGPathAddArcToPoint(outlinePath, nil, minx, maxy, minx, midy, radius); - if(self.needPointer) { - CGPathAddLineToPoint(outlinePath, nil, minx, maxy - 20); - CGPathAddLineToPoint(outlinePath, nil, minx - 6, maxy - 15); - CGPathAddLineToPoint(outlinePath, nil, minx, maxy - 10); + switch (self.type) { + case SINGLE: + CGPathMoveToPoint(outlinePath, nil, midx, miny); + CGPathAddArcToPoint(outlinePath, nil, maxx, miny, maxx, midy, radius); + CGPathAddArcToPoint(outlinePath, nil, maxx, maxy, midx, maxy, radius); + CGPathAddArcToPoint(outlinePath, nil, minx, maxy, minx, midy, radius); + CGPathAddArcToPoint(outlinePath, nil, minx, miny, midx, miny, radius); + break; + case FIRST: + CGPathMoveToPoint(outlinePath, nil, midx, miny); + CGPathAddArcToPoint(outlinePath, nil, maxx, miny, maxx, midy, radius); + CGPathAddArcToPoint(outlinePath, nil, maxx, maxy, midx, maxy, radius); + CGPathAddArcToPoint(outlinePath, nil, minx, maxy, minx, midy, radius); + CGPathAddArcToPoint(outlinePath, nil, minx, miny, midx, miny, 0); + break; + case MIDDLE: + CGPathMoveToPoint(outlinePath, nil, midx, miny); + CGPathAddArcToPoint(outlinePath, nil, maxx, miny, maxx, midy, radius); + CGPathAddArcToPoint(outlinePath, nil, maxx, maxy, midx, maxy, radius); + CGPathAddArcToPoint(outlinePath, nil, minx, maxy, minx, midy, 0); + CGPathAddArcToPoint(outlinePath, nil, minx, miny, midx, miny, 0); + break; + case LAST: + CGPathMoveToPoint(outlinePath, nil, midx, miny); + CGPathAddArcToPoint(outlinePath, nil, maxx, miny, maxx, midy, radius); + CGPathAddArcToPoint(outlinePath, nil, maxx, maxy, midx, maxy, radius); + CGPathAddArcToPoint(outlinePath, nil, minx, maxy, minx, midy, 0); + CGPathAddArcToPoint(outlinePath, nil, minx, miny, midx, miny, radius); + break; } - - CGPathAddArcToPoint(outlinePath, nil, minx, miny, midx, miny, radius); - CGPathCloseSubpath(outlinePath); - } - else - { - maxx-=6; - CGPathMoveToPoint(outlinePath, nil, midx, miny); - CGPathAddArcToPoint(outlinePath, nil, minx, miny, minx, midy, radius); - CGPathAddArcToPoint(outlinePath, nil, minx, maxy, midx, maxy, radius); - CGPathAddArcToPoint(outlinePath, nil, maxx, maxy, maxx, midy, radius); - if(self.needPointer) { - CGPathAddLineToPoint(outlinePath, nil, maxx, maxy - 20); - CGPathAddLineToPoint(outlinePath, nil, maxx + 6, maxy - 15); - CGPathAddLineToPoint(outlinePath, nil, maxx, maxy - 10); + } else { + switch (self.type) { + case SINGLE: + CGPathMoveToPoint(outlinePath, nil, midx, miny); + CGPathAddArcToPoint(outlinePath, nil, maxx, miny, maxx, midy, radius); + CGPathAddArcToPoint(outlinePath, nil, maxx, maxy, midx, maxy, radius); + CGPathAddArcToPoint(outlinePath, nil, minx, maxy, minx, midy, radius); + CGPathAddArcToPoint(outlinePath, nil, minx, miny, midx, miny, radius); + break; + case FIRST: + CGPathMoveToPoint(outlinePath, nil, midx, miny); + CGPathAddArcToPoint(outlinePath, nil, maxx, miny, maxx, midy, 0); + CGPathAddArcToPoint(outlinePath, nil, maxx, maxy, midx, maxy, radius); + CGPathAddArcToPoint(outlinePath, nil, minx, maxy, minx, midy, radius); + CGPathAddArcToPoint(outlinePath, nil, minx, miny, midx, miny, radius); + break; + case MIDDLE: + CGPathMoveToPoint(outlinePath, nil, midx, miny); + CGPathAddArcToPoint(outlinePath, nil, maxx, miny, maxx, midy, 0); + CGPathAddArcToPoint(outlinePath, nil, maxx, maxy, midx, maxy, 0); + CGPathAddArcToPoint(outlinePath, nil, minx, maxy, minx, midy, radius); + CGPathAddArcToPoint(outlinePath, nil, minx, miny, midx, miny, radius); + break; + case LAST: + CGPathMoveToPoint(outlinePath, nil, midx, miny); + CGPathAddArcToPoint(outlinePath, nil, maxx, miny, maxx, midy, radius); + CGPathAddArcToPoint(outlinePath, nil, maxx, maxy, midx, maxy, 0); + CGPathAddArcToPoint(outlinePath, nil, minx, maxy, minx, midy, radius); + CGPathAddArcToPoint(outlinePath, nil, minx, miny, midx, miny, radius); + break; } - CGPathAddArcToPoint(outlinePath, nil, maxx, miny, midx, miny, radius); - CGPathCloseSubpath(outlinePath); } + CGPathCloseSubpath(outlinePath); CGContextAddPath(context, outlinePath); CGContextFillPath(context); - CGContextAddPath(context, outlinePath); CGContextClip(context); if(self.bgColor) { @@ -76,4 +113,5 @@ NSRectFill(dirtyRect); } } + @end diff --git a/src/views/NSImage+Extensions.h b/src/views/NSImage+Extensions.h index 49d5ad1229576d1d157e72bc7c44998368526b9a..0e1d8d837acc5accdb2eaffad034eb6b28f7f34f 100644 --- a/src/views/NSImage+Extensions.h +++ b/src/views/NSImage+Extensions.h @@ -29,4 +29,8 @@ + (NSImage *)imageResize:(NSImage*)anImage newSize:(NSSize)newSize; +- (NSImage *) roundCorners:(CGFloat)radius; + +- (NSImage *) imageResizeInsideMax:(CGFloat) dimension; + @end diff --git a/src/views/NSImage+Extensions.mm b/src/views/NSImage+Extensions.mm index 16c10ff028710b70e7f235d7662b8a00e3e21087..01b5a3eb4c5233568fe77d68a61caec7e865af0d 100644 --- a/src/views/NSImage+Extensions.mm +++ b/src/views/NSImage+Extensions.mm @@ -40,4 +40,38 @@ return nil; } +- (NSImage *) roundCorners:(CGFloat)radius { + NSImage *existingImage = self; + NSSize existingSize = [existingImage size]; + NSSize newSize = NSMakeSize(existingSize.width, existingSize.height); + NSImage *composedImage = [[NSImage alloc] initWithSize:newSize]; + + [composedImage lockFocus]; + [[NSGraphicsContext currentContext] setImageInterpolation:NSImageInterpolationHigh]; + + NSRect imageFrame = NSRectFromCGRect(CGRectMake(0, 0, existingSize.width, existingSize.height)); + NSBezierPath *clipPath = [NSBezierPath bezierPathWithRoundedRect:imageFrame xRadius:radius yRadius:radius]; + [clipPath setWindingRule:NSEvenOddWindingRule]; + [clipPath addClip]; + + [existingImage drawAtPoint:NSZeroPoint fromRect:NSMakeRect(0, 0, newSize.width, newSize.height) operation:NSCompositeSourceOver fraction:1]; + + [composedImage unlockFocus]; + + return composedImage; +} + +- (NSImage*) imageResizeInsideMax:(CGFloat) dimension { + if (self.size.width < dimension && self.size.height < dimension) { + return self; + } + CGFloat widthScaleFactor = dimension / self.size.width; + CGFloat heightScaleFactor = dimension / self.size.height; + CGFloat scale = MIN(widthScaleFactor, heightScaleFactor); + NSSize size = NSZeroSize; + size.width = self.size.width * scale; + size.height = self.size.height * scale; + return [NSImage imageResize:self newSize:size]; +} + @end diff --git a/ui/Base.lproj/Conversation.xib b/ui/Base.lproj/Conversation.xib index 32fd4e28794b0ec02389e419582b0abe7913e6c7..6cfcfe83ef994e044c5f36eba6d34bccfc9091cd 100644 --- a/ui/Base.lproj/Conversation.xib +++ b/ui/Base.lproj/Conversation.xib @@ -2,6 +2,7 @@ <document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="13771" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES"> <dependencies> <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="13771"/> + <capability name="box content view" minToolsVersion="7.0"/> <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> <capability name="system font weights other than Regular or Bold" minToolsVersion="7.0"/> </dependencies> @@ -28,16 +29,16 @@ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> <subviews> <customView verticalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="EJD-f8-Xqd"> - <rect key="frame" x="0.0" y="61" width="798" height="707"/> + <rect key="frame" x="0.0" y="60" width="798" height="708"/> <subviews> <scrollView verticalCompressionResistancePriority="250" borderType="none" autohidesScrollers="YES" horizontalLineScroll="62" horizontalPageScroll="10" verticalLineScroll="62" verticalPageScroll="10" hasHorizontalScroller="NO" hasVerticalScroller="NO" usesPredominantAxisScrolling="NO" scrollerKnobStyle="dark" translatesAutoresizingMaskIntoConstraints="NO" id="Ez2-Rf-DZN"> - <rect key="frame" x="49" y="0.0" width="700" height="707"/> + <rect key="frame" x="49" y="0.0" width="700" height="708"/> <clipView key="contentView" drawsBackground="NO" copiesOnScroll="NO" id="ofC-Bs-tHR"> - <rect key="frame" x="0.0" y="0.0" width="700" height="707"/> + <rect key="frame" x="0.0" y="0.0" width="700" height="708"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <subviews> <tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" selectionHighlightStyle="none" autosaveColumns="NO" rowHeight="60" rowSizeStyle="automatic" viewBased="YES" id="bOO-CW-S21"> - <rect key="frame" x="0.0" y="0.0" width="700" height="707"/> + <rect key="frame" x="0.0" y="0.0" width="700" height="693"/> <autoresizingMask key="autoresizingMask"/> <size key="intercellSpacing" width="3" height="2"/> <color key="backgroundColor" white="1" alpha="0.0" colorSpace="deviceWhite"/> @@ -60,385 +61,291 @@ <rect key="frame" x="1" y="1" width="697" height="60"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <subviews> + <box boxType="custom" borderType="none" cornerRadius="4" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="hrX-ac-Quk"> + <rect key="frame" x="0.0" y="26" width="697" height="34"/> + <view key="contentView" id="TZF-1w-4mh"> + <rect key="frame" x="0.0" y="0.0" width="697" height="34"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> + <subviews> + <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="s8V-xi-UUp"> + <rect key="frame" x="2" y="17" width="317" height="1"/> + <constraints> + <constraint firstAttribute="height" constant="0.5" id="G8W-s8-nJB"/> + </constraints> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" drawsBackground="YES" id="YGA-cA-zHJ"> + <font key="font" metaFont="system"/> + <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="gridColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="B6E-x2-crl"> + <rect key="frame" x="337" y="9" width="24" height="17"/> + <constraints> + <constraint firstAttribute="width" priority="250" constant="20" id="w4C-8s-jzb"/> + </constraints> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="center" id="fO7-y7-Iz9"> + <font key="font" metaFont="system"/> + <color key="textColor" name="secondaryLabelColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="J1M-UA-0L9"> + <rect key="frame" x="379" y="17" width="316" height="1"/> + <constraints> + <constraint firstAttribute="height" constant="0.5" id="ggc-Og-Uvw"/> + </constraints> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" drawsBackground="YES" id="2Mq-Ip-0vh"> + <font key="font" metaFont="system"/> + <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="gridColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + </subviews> + <constraints> + <constraint firstItem="B6E-x2-crl" firstAttribute="leading" secondItem="s8V-xi-UUp" secondAttribute="trailing" constant="20" id="BYV-UG-5N2"/> + <constraint firstItem="B6E-x2-crl" firstAttribute="centerY" secondItem="TZF-1w-4mh" secondAttribute="centerY" id="LLm-mr-Onl"/> + <constraint firstItem="s8V-xi-UUp" firstAttribute="centerY" secondItem="TZF-1w-4mh" secondAttribute="centerY" id="Pmt-Az-0JS"/> + <constraint firstAttribute="trailing" secondItem="J1M-UA-0L9" secondAttribute="trailing" constant="2" id="X8C-2u-hdP"/> + <constraint firstItem="J1M-UA-0L9" firstAttribute="centerY" secondItem="TZF-1w-4mh" secondAttribute="centerY" id="bVW-cM-EEW"/> + <constraint firstItem="s8V-xi-UUp" firstAttribute="leading" secondItem="TZF-1w-4mh" secondAttribute="leading" constant="2" id="kfk-CW-IuW"/> + <constraint firstItem="J1M-UA-0L9" firstAttribute="leading" secondItem="B6E-x2-crl" secondAttribute="trailing" constant="20" id="lsX-CP-YB7"/> + <constraint firstItem="B6E-x2-crl" firstAttribute="centerX" secondItem="TZF-1w-4mh" secondAttribute="centerX" id="qDo-vn-b6Z"/> + </constraints> + </view> + <constraints> + <constraint firstAttribute="height" constant="34" id="kH8-Ax-GP0"/> + </constraints> + </box> <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" tag="100" translatesAutoresizingMaskIntoConstraints="NO" id="Uy5-qA-IO7"> - <rect key="frame" x="0.0" y="15" width="40" height="40"/> + <rect key="frame" x="0.0" y="0.0" width="30" height="30"/> <constraints> - <constraint firstAttribute="height" constant="40" id="Fyz-zn-84R"/> - <constraint firstAttribute="width" constant="40" id="Ybg-RM-bK9"/> + <constraint firstAttribute="height" constant="30" id="Fyz-zn-84R"/> + <constraint firstAttribute="width" constant="30" id="Ybg-RM-bK9"/> </constraints> <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" id="ro7-HT-yYC"/> </imageView> - <customView ambiguous="YES" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="VYf-4a-zyd" customClass="MessageBubbleView"> - <rect key="frame" x="55" y="10" width="605" height="40"/> + <customView ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="VYf-4a-zyd" customClass="MessageBubbleView"> + <rect key="frame" x="42" y="0.0" width="605" height="26"/> <subviews> - <customView ambiguous="YES" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="70Z-up-big" customClass="NSTextView"> - <rect key="frame" x="0.0" y="0.0" width="605" height="40"/> + <customView fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="70Z-up-big" customClass="NSTextView"> + <rect key="frame" x="0.0" y="-14" width="605" height="40"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> </customView> </subviews> - <constraints> - <constraint firstAttribute="trailing" secondItem="70Z-up-big" secondAttribute="trailing" id="EsS-Iy-hGM"/> - <constraint firstAttribute="bottom" secondItem="70Z-up-big" secondAttribute="bottom" id="IYL-SU-tEA"/> - <constraint firstItem="70Z-up-big" firstAttribute="top" secondItem="VYf-4a-zyd" secondAttribute="top" id="jqQ-81-SYd"/> - </constraints> </customView> </subviews> <constraints> <constraint firstItem="Uy5-qA-IO7" firstAttribute="leading" secondItem="tMT-xX-A4E" secondAttribute="leading" id="45F-kb-ZCT"/> - <constraint firstAttribute="bottom" secondItem="VYf-4a-zyd" secondAttribute="bottom" constant="5" id="4Jz-IX-8s6"/> - <constraint firstItem="VYf-4a-zyd" firstAttribute="top" secondItem="tMT-xX-A4E" secondAttribute="top" constant="5" id="HMF-Dk-IeK"/> - <constraint firstItem="VYf-4a-zyd" firstAttribute="leading" secondItem="Uy5-qA-IO7" secondAttribute="trailing" constant="2" id="PlF-GX-T6E"/> - <constraint firstItem="Uy5-qA-IO7" firstAttribute="top" secondItem="tMT-xX-A4E" secondAttribute="top" constant="5" id="ufU-t0-cbx"/> + <constraint firstItem="hrX-ac-Quk" firstAttribute="top" secondItem="tMT-xX-A4E" secondAttribute="top" id="5Ta-2M-FOm"/> + <constraint firstAttribute="trailing" secondItem="hrX-ac-Quk" secondAttribute="trailing" id="5t9-Xm-A6A"/> + <constraint firstItem="VYf-4a-zyd" firstAttribute="bottom" secondItem="Uy5-qA-IO7" secondAttribute="bottom" id="GlU-Au-yMF"/> + <constraint firstItem="VYf-4a-zyd" firstAttribute="leading" secondItem="Uy5-qA-IO7" secondAttribute="trailing" constant="12" id="PlF-GX-T6E"/> + <constraint firstItem="hrX-ac-Quk" firstAttribute="leading" secondItem="tMT-xX-A4E" secondAttribute="leading" id="Tem-Eb-rIN"/> + <constraint firstItem="VYf-4a-zyd" firstAttribute="top" secondItem="hrX-ac-Quk" secondAttribute="bottom" id="aQw-dj-DFI"/> + <constraint firstAttribute="bottom" secondItem="VYf-4a-zyd" secondAttribute="bottom" id="jPc-Jw-acQ"/> </constraints> <connections> <outlet property="msgBackground" destination="VYf-4a-zyd" id="ocX-FS-gSN"/> <outlet property="msgView" destination="70Z-up-big" id="4DD-c6-QQX"/> <outlet property="photoView" destination="Uy5-qA-IO7" id="jaJ-4h-2Qs"/> + <outlet property="timeBox" destination="hrX-ac-Quk" id="OMK-Tg-93I"/> + <outlet property="timeLabel" destination="B6E-x2-crl" id="gUo-fj-mp5"/> </connections> </tableCellView> <tableCellView identifier="RightMessageView" id="Kuf-56-7Og" userLabel="IMTableCellView" customClass="IMTableCellView"> <rect key="frame" x="1" y="63" width="697" height="60"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <subviews> + <box boxType="custom" borderType="none" cornerRadius="4" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="ciI-CA-tly"> + <rect key="frame" x="0.0" y="26" width="697" height="34"/> + <view key="contentView" id="kLf-dt-4qD"> + <rect key="frame" x="0.0" y="0.0" width="697" height="34"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> + <subviews> + <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="SFD-zP-jjp"> + <rect key="frame" x="2" y="17" width="317" height="1"/> + <constraints> + <constraint firstAttribute="height" constant="0.5" id="5QX-oR-aSk"/> + </constraints> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" drawsBackground="YES" id="XR8-Jv-Y8d"> + <font key="font" metaFont="system"/> + <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="gridColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="FC0-ft-pR6"> + <rect key="frame" x="337" y="9" width="24" height="17"/> + <constraints> + <constraint firstAttribute="width" priority="250" constant="20" id="zFg-aY-OWW"/> + </constraints> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="center" id="E8q-bO-Ify"> + <font key="font" metaFont="system"/> + <color key="textColor" name="secondaryLabelColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="snN-wu-ASV"> + <rect key="frame" x="379" y="17" width="316" height="1"/> + <constraints> + <constraint firstAttribute="height" constant="0.5" id="PXE-zM-r8B"/> + </constraints> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" drawsBackground="YES" id="bW7-Pi-B57"> + <font key="font" metaFont="system"/> + <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="gridColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + </subviews> + <constraints> + <constraint firstItem="snN-wu-ASV" firstAttribute="centerY" secondItem="kLf-dt-4qD" secondAttribute="centerY" id="0yQ-et-fNC"/> + <constraint firstItem="FC0-ft-pR6" firstAttribute="centerX" secondItem="kLf-dt-4qD" secondAttribute="centerX" id="207-Qu-Eez"/> + <constraint firstItem="FC0-ft-pR6" firstAttribute="centerY" secondItem="kLf-dt-4qD" secondAttribute="centerY" id="6Yw-nO-Shc"/> + <constraint firstAttribute="trailing" secondItem="snN-wu-ASV" secondAttribute="trailing" constant="2" id="74g-ZY-NMA"/> + <constraint firstItem="FC0-ft-pR6" firstAttribute="leading" secondItem="SFD-zP-jjp" secondAttribute="trailing" constant="20" id="Lct-N6-6ti"/> + <constraint firstItem="SFD-zP-jjp" firstAttribute="centerY" secondItem="kLf-dt-4qD" secondAttribute="centerY" id="ag0-M6-90h"/> + <constraint firstItem="snN-wu-ASV" firstAttribute="leading" secondItem="FC0-ft-pR6" secondAttribute="trailing" constant="20" id="qwm-rN-Otb"/> + <constraint firstItem="SFD-zP-jjp" firstAttribute="leading" secondItem="kLf-dt-4qD" secondAttribute="leading" constant="2" id="ugR-0a-MZ7"/> + </constraints> + </view> + <constraints> + <constraint firstAttribute="height" constant="34" id="qNQ-nX-BRr"/> + </constraints> + </box> <customView ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Sfu-lT-vTc" customClass="MessageBubbleView"> - <rect key="frame" x="5" y="5" width="637" height="50"/> + <rect key="frame" x="5" y="0.0" width="692" height="26"/> <subviews> - <customView ambiguous="YES" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="gob-L5-RgR" customClass="NSTextView"> - <rect key="frame" x="0.0" y="10" width="637" height="40"/> + <customView fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="gob-L5-RgR" customClass="NSTextView"> + <rect key="frame" x="0.0" y="-14" width="692" height="40"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> </customView> </subviews> - <constraints> - <constraint firstAttribute="bottom" secondItem="gob-L5-RgR" secondAttribute="bottom" id="3w5-QY-yhR"/> - <constraint firstAttribute="trailing" secondItem="gob-L5-RgR" secondAttribute="trailing" id="IB6-Za-sb1"/> - <constraint firstItem="gob-L5-RgR" firstAttribute="top" secondItem="Sfu-lT-vTc" secondAttribute="top" id="slK-P7-XoB"/> - </constraints> </customView> - </subviews> - <constraints> - <constraint firstAttribute="trailing" secondItem="Sfu-lT-vTc" secondAttribute="trailing" id="oLP-po-bGf"/> - <constraint firstItem="Sfu-lT-vTc" firstAttribute="top" secondItem="Kuf-56-7Og" secondAttribute="top" constant="5" id="qxj-49-fiY"/> - <constraint firstAttribute="bottom" secondItem="Sfu-lT-vTc" secondAttribute="bottom" constant="5" id="yPW-zU-W4e"/> - </constraints> - <connections> - <outlet property="msgBackground" destination="Sfu-lT-vTc" id="7bK-eM-vle"/> - <outlet property="msgView" destination="gob-L5-RgR" id="jaX-qj-YQA"/> - </connections> - </tableCellView> - <tableCellView identifier="RightOngoingFileView" id="f7f-vE-9kV" userLabel="IMTableCellView" customClass="IMTableCellView"> - <rect key="frame" x="1" y="125" width="697" height="60"/> - <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> - <subviews> - <customView ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="288-cW-DUh" customClass="MessageBubbleView"> - <rect key="frame" x="5" y="5" width="637" height="50"/> + <customView ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="R85-0p-W1u"> + <rect key="frame" x="323" y="0.0" width="40" height="30"/> <subviews> - <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="oA1-1W-48a" userLabel="Decline"> - <rect key="frame" x="36" y="6" width="44" height="43"/> + <progressIndicator wantsLayer="YES" horizontalHuggingPriority="750" verticalHuggingPriority="750" maxValue="100" bezeled="NO" indeterminate="YES" controlSize="small" style="spinning" translatesAutoresizingMaskIntoConstraints="NO" id="0wQ-xJ-dyK"> + <rect key="frame" x="12" y="7" width="16" height="16"/> <constraints> - <constraint firstAttribute="width" constant="32" id="eno-jd-EES"/> - <constraint firstAttribute="height" constant="32" id="whe-B6-NjG"/> - </constraints> - <buttonCell key="cell" type="push" bezelStyle="rounded" image="ic_action_cancel" imagePosition="overlaps" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="Owp-AR-dig"> - <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> - <font key="font" metaFont="system"/> - </buttonCell> - <connections> - <action selector="declineIncomingFile:" target="iH6-17-JsM" id="ct1-HB-Dn6"/> - </connections> - </button> - <progressIndicator wantsLayer="YES" horizontalHuggingPriority="750" verticalHuggingPriority="750" maxValue="100" doubleValue="33" bezeled="NO" indeterminate="YES" style="spinning" translatesAutoresizingMaskIntoConstraints="NO" id="RQe-25-hLb"> - <rect key="frame" x="5" y="13" width="32" height="32"/> - <constraints> - <constraint firstAttribute="width" constant="32" id="VnX-XK-8ca"/> + <constraint firstAttribute="height" constant="16" id="1bf-RT-KMB"/> + <constraint firstAttribute="width" constant="16" id="gx0-ZN-nlt"/> </constraints> </progressIndicator> - <customView horizontalCompressionResistancePriority="250" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="OYt-X6-K8Z" customClass="NSTextView"> - <rect key="frame" x="74" y="0.0" width="637" height="50"/> - </customView> - </subviews> - <constraints> - <constraint firstItem="OYt-X6-K8Z" firstAttribute="top" secondItem="288-cW-DUh" secondAttribute="top" id="0w3-eS-T0V"/> - <constraint firstAttribute="trailing" secondItem="OYt-X6-K8Z" secondAttribute="trailing" id="4mQ-qU-7Y7"/> - <constraint firstAttribute="bottom" secondItem="OYt-X6-K8Z" secondAttribute="bottom" id="Ad6-EC-9Du"/> - <constraint firstAttribute="bottom" relation="greaterThanOrEqual" secondItem="oA1-1W-48a" secondAttribute="bottom" constant="5" id="GH0-Dl-Zm5"/> - <constraint firstItem="oA1-1W-48a" firstAttribute="leading" secondItem="RQe-25-hLb" secondAttribute="trailing" constant="5" id="N9y-Ub-YcP"/> - <constraint firstItem="RQe-25-hLb" firstAttribute="leading" secondItem="288-cW-DUh" secondAttribute="leading" constant="5" id="Q4J-tW-vxk"/> - <constraint firstItem="OYt-X6-K8Z" firstAttribute="leading" secondItem="oA1-1W-48a" secondAttribute="trailing" id="RB7-Go-yT0"/> - <constraint firstItem="oA1-1W-48a" firstAttribute="top" secondItem="288-cW-DUh" secondAttribute="top" constant="5" id="bmm-Bb-vGK"/> - <constraint firstItem="RQe-25-hLb" firstAttribute="centerY" secondItem="oA1-1W-48a" secondAttribute="centerY" id="dbW-7T-VKp"/> - </constraints> - </customView> - </subviews> - <constraints> - <constraint firstItem="288-cW-DUh" firstAttribute="top" secondItem="f7f-vE-9kV" secondAttribute="top" constant="5" id="189-x9-b4Q"/> - <constraint firstAttribute="bottom" secondItem="288-cW-DUh" secondAttribute="bottom" constant="5" id="IDq-mx-De5"/> - <constraint firstAttribute="trailing" secondItem="288-cW-DUh" secondAttribute="trailing" id="MBw-oY-Aiv"/> - </constraints> - <connections> - <outlet property="declineButton" destination="oA1-1W-48a" id="u4X-s7-mLU"/> - <outlet property="msgBackground" destination="288-cW-DUh" id="koc-Gd-hgM"/> - <outlet property="msgView" destination="OYt-X6-K8Z" id="feR-5l-GtK"/> - <outlet property="progressIndicator" destination="RQe-25-hLb" id="yTf-O0-SLK"/> - </connections> - </tableCellView> - <tableCellView identifier="RightFinishedFileView" id="4Sx-gX-5hR" userLabel="IMTableCellView" customClass="IMTableCellView"> - <rect key="frame" x="1" y="187" width="697" height="60"/> - <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> - <subviews> - <customView ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="PRw-Bx-lOE" customClass="MessageBubbleView"> - <rect key="frame" x="5" y="5" width="637" height="50"/> - <subviews> - <customView horizontalCompressionResistancePriority="250" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Eay-Qd-gzU" customClass="NSTextView"> - <rect key="frame" x="48" y="0.0" width="637" height="50"/> - </customView> - <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="yyn-kD-JYn" userLabel="Status Label"> - <rect key="frame" x="3" y="17" width="47" height="17"/> - <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="center" title="Status" id="9UH-bZ-Dh4"> + <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="KJe-Om-GUV"> + <rect key="frame" x="-1" y="7" width="42" height="17"/> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="center" title="failed" id="E8F-8m-v0f"> <font key="font" metaFont="system"/> - <color key="textColor" name="tertiaryLabelColor" catalog="System" colorSpace="catalog"/> + <color key="textColor" red="1" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/> <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> </textFieldCell> </textField> </subviews> <constraints> - <constraint firstAttribute="bottom" secondItem="Eay-Qd-gzU" secondAttribute="bottom" id="2Mf-LT-vm4"/> - <constraint firstItem="yyn-kD-JYn" firstAttribute="leading" secondItem="PRw-Bx-lOE" secondAttribute="leading" constant="5" id="Fbh-Rh-T7h"/> - <constraint firstItem="Eay-Qd-gzU" firstAttribute="leading" secondItem="yyn-kD-JYn" secondAttribute="trailing" id="U7x-zY-aVr"/> - <constraint firstAttribute="trailing" secondItem="Eay-Qd-gzU" secondAttribute="trailing" id="Z9N-9J-pyy"/> - <constraint firstItem="yyn-kD-JYn" firstAttribute="centerY" secondItem="PRw-Bx-lOE" secondAttribute="centerY" id="bRX-OM-beQ"/> - <constraint firstItem="Eay-Qd-gzU" firstAttribute="top" secondItem="PRw-Bx-lOE" secondAttribute="top" id="v7Y-pr-j64"/> + <constraint firstItem="0wQ-xJ-dyK" firstAttribute="centerX" secondItem="R85-0p-W1u" secondAttribute="centerX" id="KLO-Vq-RJs"/> + <constraint firstItem="0wQ-xJ-dyK" firstAttribute="centerY" secondItem="R85-0p-W1u" secondAttribute="centerY" id="cey-zL-zGt"/> + <constraint firstItem="KJe-Om-GUV" firstAttribute="centerX" secondItem="R85-0p-W1u" secondAttribute="centerX" id="dd1-8Z-oll"/> + <constraint firstAttribute="width" constant="40" id="jtG-UX-K2l"/> + <constraint firstItem="KJe-Om-GUV" firstAttribute="centerY" secondItem="R85-0p-W1u" secondAttribute="centerY" id="lT0-ZT-ssq"/> + <constraint firstAttribute="height" constant="30" id="yN5-VE-3mY"/> </constraints> </customView> </subviews> <constraints> - <constraint firstAttribute="trailing" secondItem="PRw-Bx-lOE" secondAttribute="trailing" id="QZS-pa-Wo2"/> - <constraint firstAttribute="bottom" secondItem="PRw-Bx-lOE" secondAttribute="bottom" constant="5" id="cLM-O7-7x9"/> - <constraint firstItem="PRw-Bx-lOE" firstAttribute="top" secondItem="4Sx-gX-5hR" secondAttribute="top" constant="5" id="q5m-ch-0IR"/> + <constraint firstAttribute="bottom" secondItem="Sfu-lT-vTc" secondAttribute="bottom" id="0kN-n6-dbi"/> + <constraint firstAttribute="trailing" secondItem="ciI-CA-tly" secondAttribute="trailing" id="2UR-qR-jbN"/> + <constraint firstItem="R85-0p-W1u" firstAttribute="bottom" secondItem="Sfu-lT-vTc" secondAttribute="bottom" id="D27-qd-IeC"/> + <constraint firstAttribute="trailing" secondItem="Sfu-lT-vTc" secondAttribute="trailing" id="Dud-fA-h31"/> + <constraint firstItem="Sfu-lT-vTc" firstAttribute="leading" secondItem="R85-0p-W1u" secondAttribute="trailing" id="Mwz-p4-40h"/> + <constraint firstItem="Sfu-lT-vTc" firstAttribute="top" secondItem="ciI-CA-tly" secondAttribute="bottom" id="djM-3i-lA2"/> + <constraint firstItem="ciI-CA-tly" firstAttribute="leading" secondItem="Kuf-56-7Og" secondAttribute="leading" id="fUJ-Nz-gfY"/> + <constraint firstItem="ciI-CA-tly" firstAttribute="top" secondItem="Kuf-56-7Og" secondAttribute="top" id="kle-LJ-tbx"/> </constraints> <connections> - <outlet property="msgBackground" destination="PRw-Bx-lOE" id="Lgp-wk-Xx5"/> - <outlet property="msgView" destination="Eay-Qd-gzU" id="AsA-MB-ZdR"/> - <outlet property="statusLabel" destination="yyn-kD-JYn" id="SGR-Ih-255"/> - </connections> - </tableCellView> - <tableCellView identifier="LeftIncomingFileView" id="Odu-Nr-199" userLabel="IMTableCellView" customClass="IMTableCellView"> - <rect key="frame" x="1" y="249" width="697" height="60"/> - <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> - <subviews> - <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" tag="100" translatesAutoresizingMaskIntoConstraints="NO" id="Mx0-t4-qXG"> - <rect key="frame" x="0.0" y="15" width="40" height="40"/> - <constraints> - <constraint firstAttribute="height" constant="40" id="CYH-Z6-b8M"/> - <constraint firstAttribute="width" constant="40" id="naJ-gi-89J"/> - </constraints> - <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" id="g6c-CI-X0M"/> - </imageView> - <customView ambiguous="YES" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="J5n-7R-huf" customClass="MessageBubbleView"> - <rect key="frame" x="55" y="10" width="605" height="40"/> - <subviews> - <button verticalHuggingPriority="750" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="wSq-TJ-Fxq" userLabel="Accept"> - <rect key="frame" x="562" y="6" width="44" height="43"/> - <constraints> - <constraint firstAttribute="width" constant="32" id="Dhe-TU-Erm"/> - <constraint firstAttribute="height" constant="32" id="mCf-09-bRq"/> - </constraints> - <buttonCell key="cell" type="push" bezelStyle="rounded" image="ic_action_accept" imagePosition="overlaps" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="knW-8b-nvH"> - <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> - <font key="font" metaFont="system"/> - </buttonCell> - <connections> - <action selector="acceptIncomingFile:" target="iH6-17-JsM" id="Tq9-dO-tCJ"/> - </connections> - </button> - <button verticalHuggingPriority="750" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Z5E-G0-jlX" userLabel="Decline"> - <rect key="frame" x="530" y="6" width="44" height="43"/> - <constraints> - <constraint firstAttribute="width" constant="32" id="7US-mA-f8t"/> - <constraint firstAttribute="height" constant="32" id="euz-XP-VIf"/> - </constraints> - <buttonCell key="cell" type="push" bezelStyle="rounded" image="ic_action_cancel" imagePosition="overlaps" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="KMv-4s-k77"> - <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> - <font key="font" metaFont="system"/> - </buttonCell> - <connections> - <action selector="declineIncomingFile:" target="iH6-17-JsM" id="vbO-mr-Vca"/> - </connections> - </button> - <customView horizontalCompressionResistancePriority="250" ambiguous="YES" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="rCz-99-NJH" customClass="NSTextView"> - <rect key="frame" x="0.0" y="0.0" width="605" height="40"/> - </customView> - </subviews> - <constraints> - <constraint firstAttribute="bottom" relation="greaterThanOrEqual" secondItem="wSq-TJ-Fxq" secondAttribute="bottom" constant="5" id="5jC-hz-Yxp"/> - <constraint firstItem="rCz-99-NJH" firstAttribute="top" secondItem="J5n-7R-huf" secondAttribute="top" id="7ST-Y0-6Cq"/> - <constraint firstItem="Z5E-G0-jlX" firstAttribute="top" secondItem="J5n-7R-huf" secondAttribute="top" constant="5" id="Clg-8G-RD9"/> - <constraint firstItem="Z5E-G0-jlX" firstAttribute="leading" secondItem="rCz-99-NJH" secondAttribute="trailing" constant="5" id="ZLY-qk-XVH"/> - <constraint firstItem="rCz-99-NJH" firstAttribute="leading" secondItem="J5n-7R-huf" secondAttribute="leading" id="bcC-K6-60G"/> - <constraint firstItem="wSq-TJ-Fxq" firstAttribute="top" secondItem="J5n-7R-huf" secondAttribute="top" constant="5" id="lDu-jH-4ZI"/> - <constraint firstAttribute="bottom" secondItem="rCz-99-NJH" secondAttribute="bottom" id="nX4-e8-YpD"/> - <constraint firstAttribute="trailing" secondItem="wSq-TJ-Fxq" secondAttribute="trailing" constant="5" id="oUi-Yb-fYT"/> - <constraint firstAttribute="bottom" relation="greaterThanOrEqual" secondItem="Z5E-G0-jlX" secondAttribute="bottom" constant="5" id="pMb-Yj-JJH"/> - <constraint firstItem="wSq-TJ-Fxq" firstAttribute="leading" secondItem="Z5E-G0-jlX" secondAttribute="trailing" constant="5" id="z00-ml-93t"/> - </constraints> - </customView> - </subviews> - <constraints> - <constraint firstItem="Mx0-t4-qXG" firstAttribute="leading" secondItem="Odu-Nr-199" secondAttribute="leading" id="3vm-v9-cOX"/> - <constraint firstItem="Mx0-t4-qXG" firstAttribute="top" secondItem="Odu-Nr-199" secondAttribute="top" constant="5" id="KUS-OA-Pbc"/> - <constraint firstItem="J5n-7R-huf" firstAttribute="leading" secondItem="Mx0-t4-qXG" secondAttribute="trailing" constant="2" id="b3C-Nz-woA"/> - <constraint firstAttribute="bottom" secondItem="J5n-7R-huf" secondAttribute="bottom" constant="5" id="laY-Fk-kHl"/> - <constraint firstItem="J5n-7R-huf" firstAttribute="top" secondItem="Odu-Nr-199" secondAttribute="top" constant="5" id="oOe-mF-FMF"/> - </constraints> - <connections> - <outlet property="acceptButton" destination="wSq-TJ-Fxq" id="cgs-PK-dTN"/> - <outlet property="declineButton" destination="Z5E-G0-jlX" id="7gs-ee-HQ2"/> - <outlet property="msgBackground" destination="J5n-7R-huf" id="Pk6-3e-pep"/> - <outlet property="msgView" destination="rCz-99-NJH" id="ylK-rc-y4t"/> - <outlet property="photoView" destination="Mx0-t4-qXG" id="Rna-gq-ahd"/> - </connections> - </tableCellView> - <tableCellView identifier="LeftOngoingFileView" id="CHz-G3-A9X" userLabel="IMTableCellView" customClass="IMTableCellView"> - <rect key="frame" x="1" y="311" width="697" height="60"/> - <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> - <subviews> - <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" tag="100" translatesAutoresizingMaskIntoConstraints="NO" id="rA1-FV-pqD"> - <rect key="frame" x="0.0" y="15" width="40" height="40"/> - <constraints> - <constraint firstAttribute="height" constant="40" id="fzP-wx-JhH"/> - <constraint firstAttribute="width" constant="40" id="vr5-jk-25y"/> - </constraints> - <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" id="FuY-pz-D94"/> - </imageView> - <customView ambiguous="YES" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="6a5-Sv-RTW" customClass="MessageBubbleView"> - <rect key="frame" x="55" y="10" width="605" height="40"/> - <subviews> - <button verticalHuggingPriority="750" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="HMc-FM-eyU" userLabel="Decline"> - <rect key="frame" x="530" y="6" width="44" height="43"/> - <constraints> - <constraint firstAttribute="width" constant="32" id="E8F-5q-Wpm"/> - <constraint firstAttribute="height" constant="32" id="loH-Lp-2pk"/> - </constraints> - <buttonCell key="cell" type="push" bezelStyle="rounded" image="ic_action_cancel" imagePosition="overlaps" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="fhl-9d-Q8d"> - <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> - <font key="font" metaFont="system"/> - </buttonCell> - <connections> - <action selector="declineIncomingFile:" target="iH6-17-JsM" id="lZ3-6d-6rG"/> - </connections> - </button> - <progressIndicator wantsLayer="YES" horizontalHuggingPriority="750" verticalHuggingPriority="750" ambiguous="YES" maxValue="100" bezeled="NO" indeterminate="YES" style="spinning" translatesAutoresizingMaskIntoConstraints="NO" id="r9c-sr-4T8" userLabel="Progress Indicator"> - <rect key="frame" x="575" y="13" width="32" height="32"/> - <constraints> - <constraint firstAttribute="height" constant="32" id="4Jx-qB-KkC"/> - <constraint firstAttribute="width" constant="32" id="EUi-fn-PKE"/> - </constraints> - </progressIndicator> - <customView horizontalCompressionResistancePriority="250" ambiguous="YES" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="7RV-DW-36s" customClass="NSTextView"> - <rect key="frame" x="0.0" y="0.0" width="605" height="40"/> - </customView> - </subviews> - <constraints> - <constraint firstItem="r9c-sr-4T8" firstAttribute="leading" secondItem="HMc-FM-eyU" secondAttribute="trailing" constant="5" id="Eb9-Le-O2g"/> - <constraint firstItem="7RV-DW-36s" firstAttribute="top" secondItem="6a5-Sv-RTW" secondAttribute="top" id="F3k-8s-bif"/> - <constraint firstAttribute="trailing" secondItem="r9c-sr-4T8" secondAttribute="trailing" constant="5" id="H20-PK-xmk"/> - <constraint firstItem="r9c-sr-4T8" firstAttribute="centerY" secondItem="HMc-FM-eyU" secondAttribute="centerY" id="Rs6-7X-YSS"/> - <constraint firstItem="HMc-FM-eyU" firstAttribute="leading" secondItem="7RV-DW-36s" secondAttribute="trailing" constant="5" id="WT2-Pq-oRs"/> - <constraint firstAttribute="bottom" relation="greaterThanOrEqual" secondItem="HMc-FM-eyU" secondAttribute="bottom" constant="5" id="YuN-gQ-XPV"/> - <constraint firstItem="7RV-DW-36s" firstAttribute="leading" secondItem="6a5-Sv-RTW" secondAttribute="leading" id="dAp-5z-uJx"/> - <constraint firstItem="HMc-FM-eyU" firstAttribute="top" secondItem="6a5-Sv-RTW" secondAttribute="top" constant="5" id="dhQ-9i-WIp"/> - <constraint firstAttribute="bottom" secondItem="7RV-DW-36s" secondAttribute="bottom" id="yYR-NR-qzg"/> - </constraints> - </customView> - </subviews> - <constraints> - <constraint firstItem="rA1-FV-pqD" firstAttribute="top" secondItem="CHz-G3-A9X" secondAttribute="top" constant="5" id="FF7-iT-f6H"/> - <constraint firstItem="6a5-Sv-RTW" firstAttribute="leading" secondItem="rA1-FV-pqD" secondAttribute="trailing" constant="2" id="Qfy-Lo-Ld7"/> - <constraint firstItem="6a5-Sv-RTW" firstAttribute="top" secondItem="CHz-G3-A9X" secondAttribute="top" constant="5" id="Xym-5G-K13"/> - <constraint firstAttribute="bottom" secondItem="6a5-Sv-RTW" secondAttribute="bottom" constant="5" id="uyT-xw-0Dt"/> - <constraint firstItem="rA1-FV-pqD" firstAttribute="leading" secondItem="CHz-G3-A9X" secondAttribute="leading" id="wrI-ab-uok"/> - </constraints> - <connections> - <outlet property="declineButton" destination="HMc-FM-eyU" id="HPP-Zh-pWk"/> - <outlet property="msgBackground" destination="6a5-Sv-RTW" id="y39-jd-8xS"/> - <outlet property="msgView" destination="7RV-DW-36s" id="j1R-oc-xBX"/> - <outlet property="photoView" destination="rA1-FV-pqD" id="ujZ-qR-aoI"/> - <outlet property="progressIndicator" destination="r9c-sr-4T8" id="4WO-SM-3hK"/> + <outlet property="messageFailed" destination="KJe-Om-GUV" id="CDM-uJ-Bwq"/> + <outlet property="messageStatus" destination="R85-0p-W1u" id="m2j-ho-aqf"/> + <outlet property="msgBackground" destination="Sfu-lT-vTc" id="7bK-eM-vle"/> + <outlet property="msgView" destination="gob-L5-RgR" id="jaX-qj-YQA"/> + <outlet property="sendingMessageIndicator" destination="0wQ-xJ-dyK" id="L3B-H1-yTq"/> + <outlet property="timeBox" destination="ciI-CA-tly" id="xLR-6A-bON"/> + <outlet property="timeLabel" destination="FC0-ft-pR6" id="KpW-ed-esW"/> </connections> </tableCellView> - <tableCellView identifier="LeftFinishedFileView" id="uhL-Ve-VU7" userLabel="IMTableCellView" customClass="IMTableCellView"> - <rect key="frame" x="1" y="373" width="697" height="60"/> + <tableCellView identifier="GenericInteractionView" id="pNa-Do-cpO" userLabel="GenericInteractionView"> + <rect key="frame" x="1" y="125" width="697" height="60"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <subviews> - <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" tag="100" translatesAutoresizingMaskIntoConstraints="NO" id="Rqb-9f-Zoq"> - <rect key="frame" x="0.0" y="15" width="40" height="40"/> + <box boxType="custom" borderType="none" cornerRadius="4" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="pRL-vb-me9"> + <rect key="frame" x="0.0" y="33" width="697" height="20"/> + <view key="contentView" id="iVA-Tj-VbA"> + <rect key="frame" x="0.0" y="0.0" width="697" height="20"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> + <subviews> + <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="sn1-nc-yQx"> + <rect key="frame" x="2" y="10" width="317" height="1"/> + <constraints> + <constraint firstAttribute="height" constant="0.5" id="WYy-iF-oAy"/> + </constraints> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" drawsBackground="YES" id="XAh-GZ-fZa"> + <font key="font" metaFont="system"/> + <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="gridColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" tag="200" translatesAutoresizingMaskIntoConstraints="NO" id="WSh-d6-EpR"> + <rect key="frame" x="337" y="2" width="24" height="17"/> + <constraints> + <constraint firstAttribute="width" priority="250" constant="20" id="8Nd-Xa-aax"/> + </constraints> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="center" id="t8v-wm-DsX"> + <font key="font" metaFont="system"/> + <color key="textColor" name="secondaryLabelColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="xaz-dy-kwP"> + <rect key="frame" x="379" y="10" width="316" height="1"/> + <constraints> + <constraint firstAttribute="height" constant="0.5" id="xVf-gW-kTW"/> + </constraints> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" drawsBackground="YES" id="ZtA-qE-ud4"> + <font key="font" metaFont="system"/> + <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="gridColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + </subviews> + <constraints> + <constraint firstItem="WSh-d6-EpR" firstAttribute="leading" secondItem="sn1-nc-yQx" secondAttribute="trailing" constant="20" id="6JR-EN-iW2"/> + <constraint firstItem="sn1-nc-yQx" firstAttribute="centerY" secondItem="iVA-Tj-VbA" secondAttribute="centerY" id="86f-oT-Ypa"/> + <constraint firstItem="xaz-dy-kwP" firstAttribute="leading" secondItem="WSh-d6-EpR" secondAttribute="trailing" constant="20" id="Fug-23-VO9"/> + <constraint firstItem="WSh-d6-EpR" firstAttribute="centerY" secondItem="iVA-Tj-VbA" secondAttribute="centerY" id="GAR-rf-ja9"/> + <constraint firstAttribute="trailing" secondItem="xaz-dy-kwP" secondAttribute="trailing" constant="2" id="GbK-3b-OQp"/> + <constraint firstItem="WSh-d6-EpR" firstAttribute="centerX" secondItem="iVA-Tj-VbA" secondAttribute="centerX" id="NVw-O3-WRG"/> + <constraint firstItem="sn1-nc-yQx" firstAttribute="leading" secondItem="iVA-Tj-VbA" secondAttribute="leading" constant="2" id="Pd5-yg-a6D"/> + <constraint firstItem="xaz-dy-kwP" firstAttribute="centerY" secondItem="iVA-Tj-VbA" secondAttribute="centerY" id="rXe-jz-Izb"/> + </constraints> + </view> <constraints> - <constraint firstAttribute="height" constant="40" id="LTJ-IZ-3Gu"/> - <constraint firstAttribute="width" constant="40" id="PZo-zB-kO5"/> + <constraint firstAttribute="height" constant="20" id="sNr-mm-ozG"/> </constraints> - <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" id="SOa-ju-8N4"/> - </imageView> - <customView ambiguous="YES" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Kx7-K6-Not" customClass="MessageBubbleView"> - <rect key="frame" x="55" y="10" width="605" height="40"/> - <subviews> - <customView horizontalCompressionResistancePriority="250" ambiguous="YES" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="o5P-Ba-cmY" customClass="NSTextView"> - <rect key="frame" x="0.0" y="0.0" width="605" height="40"/> - </customView> - <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="YQ5-ba-kO1" userLabel="Status Label"> - <rect key="frame" x="548" y="17" width="43" height="17"/> - <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Status" id="wda-AH-f6w"> - <font key="font" metaFont="system"/> - <color key="textColor" name="tertiaryLabelColor" catalog="System" colorSpace="catalog"/> - <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> - </textFieldCell> - </textField> - </subviews> + </box> + <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" tag="100" translatesAutoresizingMaskIntoConstraints="NO" id="35p-WS-DUv" userLabel="ContactInteractionLabel"> + <rect key="frame" x="330" y="11" width="37" height="17"/> <constraints> - <constraint firstItem="o5P-Ba-cmY" firstAttribute="leading" secondItem="Kx7-K6-Not" secondAttribute="leading" id="JvE-B3-K2i"/> - <constraint firstAttribute="trailing" secondItem="YQ5-ba-kO1" secondAttribute="trailing" constant="5" id="aYy-ZZ-ChA"/> - <constraint firstItem="YQ5-ba-kO1" firstAttribute="leading" secondItem="o5P-Ba-cmY" secondAttribute="trailing" id="byM-WN-BoL"/> - <constraint firstAttribute="bottom" secondItem="o5P-Ba-cmY" secondAttribute="bottom" id="igc-YG-x7g"/> - <constraint firstItem="o5P-Ba-cmY" firstAttribute="top" secondItem="Kx7-K6-Not" secondAttribute="top" id="lVY-Rs-Wde"/> - <constraint firstItem="YQ5-ba-kO1" firstAttribute="centerY" secondItem="Kx7-K6-Not" secondAttribute="centerY" id="stn-hm-WVf"/> + <constraint firstAttribute="height" constant="17" id="azh-RJ-oYw"/> </constraints> - </customView> - </subviews> - <constraints> - <constraint firstItem="Kx7-K6-Not" firstAttribute="leading" secondItem="Rqb-9f-Zoq" secondAttribute="trailing" constant="2" id="7Ka-Rf-v9d"/> - <constraint firstItem="Kx7-K6-Not" firstAttribute="top" secondItem="uhL-Ve-VU7" secondAttribute="top" constant="5" id="87q-V7-EcF"/> - <constraint firstItem="Rqb-9f-Zoq" firstAttribute="top" secondItem="uhL-Ve-VU7" secondAttribute="top" constant="5" id="dNk-da-JyN"/> - <constraint firstItem="Rqb-9f-Zoq" firstAttribute="leading" secondItem="uhL-Ve-VU7" secondAttribute="leading" id="etr-El-H0q"/> - <constraint firstAttribute="bottom" secondItem="Kx7-K6-Not" secondAttribute="bottom" constant="5" id="owe-iS-CLq"/> - </constraints> - <connections> - <outlet property="msgBackground" destination="Kx7-K6-Not" id="Hpi-s1-okx"/> - <outlet property="msgView" destination="o5P-Ba-cmY" id="hAb-pv-dEB"/> - <outlet property="photoView" destination="Rqb-9f-Zoq" id="JRG-ed-wgX"/> - <outlet property="statusLabel" destination="YQ5-ba-kO1" id="0Xu-ui-RrM"/> - </connections> - </tableCellView> - <tableCellView identifier="GenericInteractionView" misplaced="YES" id="pNa-Do-cpO" userLabel="GenericInteractionView"> - <rect key="frame" x="1" y="435" width="697" height="22"/> - <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> - <subviews> - <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" tag="100" translatesAutoresizingMaskIntoConstraints="NO" id="35p-WS-DUv" userLabel="ContactInteractionLabel"> - <rect key="frame" x="330" y="6" width="37" height="17"/> <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Label" id="jRF-Jm-tK5"> <font key="font" metaFont="systemLight" size="13"/> <color key="textColor" name="secondaryLabelColor" catalog="System" colorSpace="catalog"/> <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> </textFieldCell> </textField> - <box verticalHuggingPriority="750" boxType="separator" translatesAutoresizingMaskIntoConstraints="NO" id="aUR-Zb-1Ry"> - <rect key="frame" x="174" y="-2" width="350" height="5"/> - <constraints> - <constraint firstAttribute="width" constant="350" id="gh1-og-RNm"/> - </constraints> - </box> </subviews> <constraints> - <constraint firstItem="aUR-Zb-1Ry" firstAttribute="centerX" secondItem="pNa-Do-cpO" secondAttribute="centerX" id="3cU-kJ-UWV"/> - <constraint firstItem="aUR-Zb-1Ry" firstAttribute="top" secondItem="35p-WS-DUv" secondAttribute="bottom" constant="5" id="GM2-QF-lCd"/> - <constraint firstItem="35p-WS-DUv" firstAttribute="top" secondItem="pNa-Do-cpO" secondAttribute="top" constant="5" id="Sph-s4-1Fc"/> - <constraint firstAttribute="bottom" secondItem="aUR-Zb-1Ry" secondAttribute="bottom" id="fJU-4m-Wz2"/> + <constraint firstItem="pRL-vb-me9" firstAttribute="top" secondItem="pNa-Do-cpO" secondAttribute="top" constant="7" id="Va0-uf-PZg"/> + <constraint firstItem="35p-WS-DUv" firstAttribute="top" secondItem="pRL-vb-me9" secondAttribute="bottom" constant="5" id="f03-hS-3Vo"/> + <constraint firstAttribute="trailing" secondItem="pRL-vb-me9" secondAttribute="trailing" id="hjz-dn-8tG"/> <constraint firstItem="35p-WS-DUv" firstAttribute="centerX" secondItem="pNa-Do-cpO" secondAttribute="centerX" id="im5-bF-xb1"/> + <constraint firstItem="pRL-vb-me9" firstAttribute="leading" secondItem="pNa-Do-cpO" secondAttribute="leading" id="kEo-JG-JUz"/> </constraints> </tableCellView> </prototypeCellViews> @@ -454,6 +361,7 @@ <constraints> <constraint firstAttribute="width" constant="700" id="hVv-sa-XIA"/> </constraints> + <edgeInsets key="contentInsets" left="0.0" right="0.0" top="0.0" bottom="15"/> <scroller key="horizontalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="YES" id="6oQ-AB-A54"> <rect key="frame" x="-100" y="-100" width="739" height="15"/> <autoresizingMask key="autoresizingMask"/> @@ -678,7 +586,7 @@ <constraint firstItem="EJD-f8-Xqd" firstAttribute="centerX" secondItem="Hz6-mo-xeY" secondAttribute="centerX" id="bvr-Gv-Sgb"/> <constraint firstItem="Sn1-dJ-QCw" firstAttribute="leading" secondItem="Hz6-mo-xeY" secondAttribute="leading" id="dtD-1T-QlG"/> <constraint firstItem="SQT-Vf-Lhr" firstAttribute="bottom" secondItem="ooq-vs-Xt1" secondAttribute="bottom" id="e8m-qq-0SV"/> - <constraint firstItem="Rth-di-Tls" firstAttribute="top" secondItem="EJD-f8-Xqd" secondAttribute="bottom" constant="1" id="f8h-bA-ZrZ"/> + <constraint firstItem="Rth-di-Tls" firstAttribute="top" secondItem="EJD-f8-Xqd" secondAttribute="bottom" id="f8h-bA-ZrZ"/> <constraint firstItem="RuH-fO-poy" firstAttribute="leading" secondItem="pGK-hO-X1Y" secondAttribute="trailing" constant="10" id="fCS-uv-8E2"/> <constraint firstItem="ooq-vs-Xt1" firstAttribute="top" secondItem="Hz6-mo-xeY" secondAttribute="top" constant="10" id="gkR-53-qs5"/> <constraint firstAttribute="trailing" secondItem="EJD-f8-Xqd" secondAttribute="trailing" id="hSZ-8v-sis"/> @@ -697,9 +605,7 @@ </viewController> </objects> <resources> - <image name="ic_action_accept" width="72" height="72"/> <image name="ic_action_call" width="72" height="72"/> - <image name="ic_action_cancel" width="72" height="72"/> <image name="ic_action_send" width="72" height="72"/> <image name="ic_action_video" width="72" height="72"/> <image name="ic_arrow_back" width="72" height="72"/> diff --git a/ui/Base.lproj/CurrentCall.xib b/ui/Base.lproj/CurrentCall.xib index 56695561af2b963085004c127e8ad2af1f18ad74..6a220460b064332d0af4a4392ec67247d8ab2cef 100644 --- a/ui/Base.lproj/CurrentCall.xib +++ b/ui/Base.lproj/CurrentCall.xib @@ -2,6 +2,7 @@ <document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="13771" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES"> <dependencies> <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="13771"/> + <capability name="box content view" minToolsVersion="7.0"/> <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> <capability name="system font weights other than Regular or Bold" minToolsVersion="7.0"/> </dependencies> @@ -672,13 +673,13 @@ <autoresizingMask key="autoresizingMask"/> <subviews> <scrollView borderType="none" autohidesScrollers="YES" horizontalLineScroll="62" horizontalPageScroll="10" verticalLineScroll="62" verticalPageScroll="10" hasHorizontalScroller="NO" hasVerticalScroller="NO" usesPredominantAxisScrolling="NO" scrollerKnobStyle="dark" translatesAutoresizingMaskIntoConstraints="NO" id="o0i-7W-5fA"> - <rect key="frame" x="0.0" y="42" width="372" height="465"/> + <rect key="frame" x="0.0" y="59" width="372" height="448"/> <clipView key="contentView" drawsBackground="NO" copiesOnScroll="NO" id="H2i-4W-Gvt"> - <rect key="frame" x="0.0" y="0.0" width="372" height="465"/> + <rect key="frame" x="0.0" y="0.0" width="372" height="448"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <subviews> <tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" selectionHighlightStyle="none" autosaveColumns="NO" rowHeight="60" rowSizeStyle="automatic" viewBased="YES" id="ZOj-5b-rnp"> - <rect key="frame" x="0.0" y="0.0" width="372" height="465"/> + <rect key="frame" x="0.0" y="0.0" width="372" height="448"/> <autoresizingMask key="autoresizingMask"/> <size key="intercellSpacing" width="3" height="2"/> <color key="backgroundColor" white="1" alpha="0.0" colorSpace="deviceWhite"/> @@ -701,408 +702,258 @@ <rect key="frame" x="1" y="1" width="369" height="60"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <subviews> + <box boxType="custom" borderType="none" cornerRadius="4" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="KCp-bZ-69S"> + <rect key="frame" x="20" y="26" width="329" height="34"/> + <view key="contentView" id="zOQ-1z-mQG"> + <rect key="frame" x="0.0" y="0.0" width="329" height="34"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> + <subviews> + <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="B1i-jP-eXr"> + <rect key="frame" x="2" y="17" width="133" height="1"/> + <constraints> + <constraint firstAttribute="height" constant="0.5" id="4p2-P2-8ft"/> + </constraints> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" drawsBackground="YES" id="OxW-dT-plf"> + <font key="font" metaFont="system"/> + <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="gridColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="IJm-DU-cs6"> + <rect key="frame" x="153" y="9" width="24" height="17"/> + <constraints> + <constraint firstAttribute="width" priority="250" constant="20" id="HNl-gc-YBr"/> + </constraints> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="center" id="UrO-87-XKZ"> + <font key="font" metaFont="system"/> + <color key="textColor" name="secondaryLabelColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="kTc-UX-6Gd"> + <rect key="frame" x="195" y="17" width="132" height="1"/> + <constraints> + <constraint firstAttribute="height" constant="0.5" id="E1L-fH-4F9"/> + </constraints> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" drawsBackground="YES" id="Vfe-3g-orH"> + <font key="font" metaFont="system"/> + <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="gridColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + </subviews> + <constraints> + <constraint firstItem="IJm-DU-cs6" firstAttribute="leading" secondItem="B1i-jP-eXr" secondAttribute="trailing" constant="20" id="ABP-rw-3Tu"/> + <constraint firstAttribute="trailing" secondItem="kTc-UX-6Gd" secondAttribute="trailing" constant="2" id="Jfr-QA-65H"/> + <constraint firstItem="B1i-jP-eXr" firstAttribute="leading" secondItem="zOQ-1z-mQG" secondAttribute="leading" constant="2" id="cGU-ne-8qD"/> + <constraint firstItem="kTc-UX-6Gd" firstAttribute="centerY" secondItem="zOQ-1z-mQG" secondAttribute="centerY" id="f4i-XU-NK3"/> + <constraint firstItem="kTc-UX-6Gd" firstAttribute="leading" secondItem="IJm-DU-cs6" secondAttribute="trailing" constant="20" id="gvl-wT-aY5"/> + <constraint firstItem="IJm-DU-cs6" firstAttribute="centerY" secondItem="zOQ-1z-mQG" secondAttribute="centerY" id="im1-8w-nQm"/> + <constraint firstItem="B1i-jP-eXr" firstAttribute="centerY" secondItem="zOQ-1z-mQG" secondAttribute="centerY" id="mrL-yE-Bdd"/> + <constraint firstItem="IJm-DU-cs6" firstAttribute="centerX" secondItem="zOQ-1z-mQG" secondAttribute="centerX" id="pYe-Le-3Gc"/> + </constraints> + </view> + <constraints> + <constraint firstAttribute="height" constant="34" id="PmQ-jg-thf"/> + </constraints> + </box> <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" tag="100" translatesAutoresizingMaskIntoConstraints="NO" id="siU-cO-eGp"> - <rect key="frame" x="0.0" y="25" width="30" height="30"/> + <rect key="frame" x="20" y="0.0" width="30" height="30"/> <constraints> <constraint firstAttribute="height" constant="30" id="U8O-T7-wN4"/> <constraint firstAttribute="width" constant="30" id="dx4-KH-ynY"/> </constraints> <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" id="AmG-9L-7JZ"/> </imageView> - <customView ambiguous="YES" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="wfP-VD-ALD" customClass="MessageBubbleView"> - <rect key="frame" x="45" y="3" width="287" height="54"/> + <customView ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="wfP-VD-ALD" customClass="MessageBubbleView"> + <rect key="frame" x="70" y="0.0" width="287" height="26"/> <subviews> - <customView ambiguous="YES" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="PUG-NN-vrV" customClass="NSTextView"> - <rect key="frame" x="0.0" y="3" width="287" height="48"/> + <customView fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="PUG-NN-vrV" customClass="NSTextView"> + <rect key="frame" x="0.0" y="-25" width="287" height="48"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> </customView> </subviews> - <constraints> - <constraint firstItem="PUG-NN-vrV" firstAttribute="top" secondItem="wfP-VD-ALD" secondAttribute="top" id="6yD-QN-vRe"/> - <constraint firstAttribute="bottom" secondItem="PUG-NN-vrV" secondAttribute="bottom" id="Lsv-xW-Rdz"/> - <constraint firstAttribute="trailing" secondItem="PUG-NN-vrV" secondAttribute="trailing" id="SCY-p6-Dc1"/> - <constraint firstItem="PUG-NN-vrV" firstAttribute="leading" secondItem="wfP-VD-ALD" secondAttribute="leading" id="VRn-cU-GTS"/> - </constraints> </customView> </subviews> <constraints> - <constraint firstItem="siU-cO-eGp" firstAttribute="top" secondItem="ISP-Ld-mHk" secondAttribute="top" constant="5" id="8Rb-iQ-CVj"/> - <constraint firstItem="wfP-VD-ALD" firstAttribute="leading" secondItem="siU-cO-eGp" secondAttribute="trailing" constant="2" id="QN7-Em-AFu"/> - <constraint firstItem="wfP-VD-ALD" firstAttribute="top" secondItem="ISP-Ld-mHk" secondAttribute="top" constant="5" id="X8b-6e-3B3"/> - <constraint firstItem="siU-cO-eGp" firstAttribute="leading" secondItem="ISP-Ld-mHk" secondAttribute="leading" id="adZ-9b-R8G"/> - <constraint firstAttribute="bottom" secondItem="wfP-VD-ALD" secondAttribute="bottom" constant="5" id="wxQ-eM-vOR"/> + <constraint firstItem="KCp-bZ-69S" firstAttribute="top" secondItem="ISP-Ld-mHk" secondAttribute="top" id="1cV-Tm-aax"/> + <constraint firstItem="wfP-VD-ALD" firstAttribute="top" secondItem="KCp-bZ-69S" secondAttribute="bottom" id="5bJ-5n-Lxr"/> + <constraint firstAttribute="trailing" secondItem="KCp-bZ-69S" secondAttribute="trailing" constant="20" id="Kuc-Lp-cxE"/> + <constraint firstItem="wfP-VD-ALD" firstAttribute="leading" secondItem="siU-cO-eGp" secondAttribute="trailing" constant="20" id="QN7-Em-AFu"/> + <constraint firstItem="wfP-VD-ALD" firstAttribute="bottom" secondItem="siU-cO-eGp" secondAttribute="bottom" id="a6Y-Ho-AVA"/> + <constraint firstItem="siU-cO-eGp" firstAttribute="leading" secondItem="ISP-Ld-mHk" secondAttribute="leading" constant="20" id="adZ-9b-R8G"/> + <constraint firstItem="KCp-bZ-69S" firstAttribute="leading" secondItem="ISP-Ld-mHk" secondAttribute="leading" constant="20" id="wUx-5B-FOC"/> + <constraint firstAttribute="bottom" secondItem="wfP-VD-ALD" secondAttribute="bottom" id="wxQ-eM-vOR"/> </constraints> <connections> <outlet property="msgBackground" destination="wfP-VD-ALD" id="fbB-OB-zyZ"/> <outlet property="msgView" destination="PUG-NN-vrV" id="BH6-vT-Y7i"/> <outlet property="photoView" destination="siU-cO-eGp" id="dVV-s6-I4b"/> + <outlet property="timeBox" destination="KCp-bZ-69S" id="vwG-iW-MyC"/> + <outlet property="timeLabel" destination="IJm-DU-cs6" id="bxA-Ge-0iQ"/> </connections> </tableCellView> <tableCellView identifier="RightMessageView" id="rMU-hx-cKa" userLabel="IMTableCellView" customClass="IMTableCellView"> <rect key="frame" x="1" y="63" width="369" height="60"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <subviews> - <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" tag="100" translatesAutoresizingMaskIntoConstraints="NO" id="Aqd-t7-hSI"> - <rect key="frame" x="334" y="25" width="30" height="30"/> + <box boxType="custom" borderType="none" cornerRadius="4" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="hfc-s5-yWK"> + <rect key="frame" x="10" y="26" width="339" height="34"/> + <view key="contentView" id="Ae5-hd-Kkm"> + <rect key="frame" x="0.0" y="0.0" width="339" height="34"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> + <subviews> + <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="3es-AU-VlZ"> + <rect key="frame" x="2" y="17" width="138" height="1"/> + <constraints> + <constraint firstAttribute="height" constant="0.5" id="ZP5-5o-Q5d"/> + </constraints> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" drawsBackground="YES" id="tl4-Fa-8Tu"> + <font key="font" metaFont="system"/> + <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="gridColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="xkH-rw-k6w"> + <rect key="frame" x="158" y="9" width="24" height="17"/> + <constraints> + <constraint firstAttribute="width" priority="250" constant="20" id="IIf-Z3-Q3T"/> + </constraints> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="center" id="f76-cI-oqW"> + <font key="font" metaFont="system"/> + <color key="textColor" name="secondaryLabelColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="VNU-Mo-g8L"> + <rect key="frame" x="200" y="17" width="137" height="1"/> + <constraints> + <constraint firstAttribute="height" constant="0.5" id="bca-oM-9yX"/> + </constraints> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" drawsBackground="YES" id="BFw-xv-ZlU"> + <font key="font" metaFont="system"/> + <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="gridColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + </subviews> + <constraints> + <constraint firstItem="VNU-Mo-g8L" firstAttribute="centerY" secondItem="Ae5-hd-Kkm" secondAttribute="centerY" id="4aA-xX-VbS"/> + <constraint firstItem="VNU-Mo-g8L" firstAttribute="leading" secondItem="xkH-rw-k6w" secondAttribute="trailing" constant="20" id="ImX-s6-wAP"/> + <constraint firstItem="3es-AU-VlZ" firstAttribute="centerY" secondItem="Ae5-hd-Kkm" secondAttribute="centerY" id="JTp-x2-aMV"/> + <constraint firstItem="xkH-rw-k6w" firstAttribute="leading" secondItem="3es-AU-VlZ" secondAttribute="trailing" constant="20" id="OjW-bw-CHO"/> + <constraint firstAttribute="trailing" secondItem="VNU-Mo-g8L" secondAttribute="trailing" constant="2" id="RHm-O7-hDr"/> + <constraint firstItem="xkH-rw-k6w" firstAttribute="centerY" secondItem="Ae5-hd-Kkm" secondAttribute="centerY" id="RJe-dB-bmp"/> + <constraint firstItem="xkH-rw-k6w" firstAttribute="centerX" secondItem="Ae5-hd-Kkm" secondAttribute="centerX" id="XLg-lD-XzA"/> + <constraint firstItem="3es-AU-VlZ" firstAttribute="leading" secondItem="Ae5-hd-Kkm" secondAttribute="leading" constant="2" id="rWE-3m-vZB"/> + </constraints> + </view> <constraints> - <constraint firstAttribute="width" constant="30" id="dQp-WK-HPM"/> - <constraint firstAttribute="height" constant="30" id="yxc-EG-paH"/> + <constraint firstAttribute="height" constant="34" id="p3P-Wg-s0n"/> </constraints> - <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" id="7P1-iB-76C"/> - </imageView> - <customView ambiguous="YES" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="0o9-as-0kP" customClass="MessageBubbleView"> - <rect key="frame" x="3" y="3" width="244" height="54"/> + </box> + <customView ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="0o9-as-0kP" customClass="MessageBubbleView"> + <rect key="frame" x="58" y="0.0" width="311" height="26"/> <subviews> - <customView ambiguous="YES" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="3id-hP-gmA" customClass="NSTextView"> - <rect key="frame" x="0.0" y="3" width="241" height="51"/> + <customView fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="3id-hP-gmA" customClass="NSTextView"> + <rect key="frame" x="0.0" y="-14" width="58" height="0.0"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> </customView> </subviews> - <constraints> - <constraint firstItem="3id-hP-gmA" firstAttribute="top" secondItem="0o9-as-0kP" secondAttribute="top" id="Hzi-iN-j4G"/> - <constraint firstAttribute="trailing" secondItem="3id-hP-gmA" secondAttribute="trailing" id="QRv-WL-gYF"/> - <constraint firstItem="3id-hP-gmA" firstAttribute="leading" secondItem="0o9-as-0kP" secondAttribute="leading" id="Tuc-zK-VZn"/> - <constraint firstAttribute="bottom" secondItem="3id-hP-gmA" secondAttribute="bottom" id="ngN-Zp-yf5"/> - </constraints> </customView> </subviews> <constraints> - <constraint firstItem="Aqd-t7-hSI" firstAttribute="leading" secondItem="0o9-as-0kP" secondAttribute="trailing" constant="2" id="3zR-EU-qZD"/> - <constraint firstItem="Aqd-t7-hSI" firstAttribute="top" secondItem="rMU-hx-cKa" secondAttribute="top" constant="5" id="EEr-qe-dDm"/> - <constraint firstAttribute="bottom" secondItem="0o9-as-0kP" secondAttribute="bottom" constant="5" id="XTL-j6-WbQ"/> - <constraint firstAttribute="trailing" secondItem="Aqd-t7-hSI" secondAttribute="trailing" constant="5" id="ifx-Wc-6lA"/> - <constraint firstItem="0o9-as-0kP" firstAttribute="top" secondItem="rMU-hx-cKa" secondAttribute="top" constant="5" id="ydL-7d-EgJ"/> + <constraint firstItem="hfc-s5-yWK" firstAttribute="top" secondItem="rMU-hx-cKa" secondAttribute="top" id="G37-AS-eTc"/> + <constraint firstAttribute="trailing" secondItem="0o9-as-0kP" secondAttribute="trailing" constant="20" id="Qjo-Xd-8ci"/> + <constraint firstAttribute="bottom" secondItem="0o9-as-0kP" secondAttribute="bottom" id="XTL-j6-WbQ"/> + <constraint firstItem="hfc-s5-yWK" firstAttribute="leading" secondItem="rMU-hx-cKa" secondAttribute="leading" constant="10" id="bCg-zp-hsW"/> + <constraint firstItem="0o9-as-0kP" firstAttribute="top" secondItem="hfc-s5-yWK" secondAttribute="bottom" id="pli-nb-uUj"/> + <constraint firstAttribute="trailing" secondItem="hfc-s5-yWK" secondAttribute="trailing" constant="20" id="t8O-y0-AVg"/> </constraints> <connections> <outlet property="msgBackground" destination="0o9-as-0kP" id="E13-QI-aKa"/> <outlet property="msgView" destination="3id-hP-gmA" id="QP2-nb-drh"/> - <outlet property="photoView" destination="Aqd-t7-hSI" id="tFi-xR-zui"/> + <outlet property="timeBox" destination="hfc-s5-yWK" id="asT-uh-kmF"/> + <outlet property="timeLabel" destination="xkH-rw-k6w" id="WQc-BF-dSZ"/> </connections> </tableCellView> - <tableCellView identifier="LeftFinishedFileView" id="fac-Kf-RfH" userLabel="IMTableCellView" customClass="IMTableCellView"> + <tableCellView identifier="GenericInteractionView" id="0tt-a5-Dex" userLabel="GenericInteractionView"> <rect key="frame" x="1" y="125" width="369" height="60"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <subviews> - <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" tag="100" translatesAutoresizingMaskIntoConstraints="NO" id="1aC-fp-mZr"> - <rect key="frame" x="0.0" y="25" width="30" height="30"/> - <constraints> - <constraint firstAttribute="width" constant="30" id="Ytt-Mn-nI7"/> - <constraint firstAttribute="height" constant="30" id="gvg-Fs-Bez"/> - </constraints> - <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" id="g8K-K3-lzW"/> - </imageView> - <customView ambiguous="YES" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="ocK-4E-xFU" customClass="MessageBubbleView"> - <rect key="frame" x="55" y="10" width="605" height="40"/> - <subviews> - <customView horizontalCompressionResistancePriority="250" ambiguous="YES" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Vhy-kA-Ejd" customClass="NSTextView"> - <rect key="frame" x="0.0" y="0.0" width="605" height="40"/> - </customView> - <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="oEK-Iz-g9Y" userLabel="Status Label"> - <rect key="frame" x="548" y="17" width="43" height="17"/> - <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Status" id="SNy-eT-sfm"> - <font key="font" metaFont="system"/> - <color key="textColor" name="tertiaryLabelColor" catalog="System" colorSpace="catalog"/> - <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> - </textFieldCell> - </textField> - </subviews> - <constraints> - <constraint firstItem="Vhy-kA-Ejd" firstAttribute="top" secondItem="ocK-4E-xFU" secondAttribute="top" id="AD1-Tl-EFt"/> - <constraint firstAttribute="trailing" secondItem="oEK-Iz-g9Y" secondAttribute="trailing" constant="5" id="RYR-zi-Ct7"/> - <constraint firstItem="Vhy-kA-Ejd" firstAttribute="leading" secondItem="ocK-4E-xFU" secondAttribute="leading" id="Siu-gE-27q"/> - <constraint firstAttribute="bottom" secondItem="Vhy-kA-Ejd" secondAttribute="bottom" id="gh8-fp-tbL"/> - <constraint firstItem="oEK-Iz-g9Y" firstAttribute="centerY" secondItem="ocK-4E-xFU" secondAttribute="centerY" id="ghn-G2-GpH"/> - <constraint firstItem="oEK-Iz-g9Y" firstAttribute="leading" secondItem="Vhy-kA-Ejd" secondAttribute="trailing" id="p8z-N4-CKv"/> - </constraints> - </customView> - </subviews> - <constraints> - <constraint firstAttribute="bottom" secondItem="ocK-4E-xFU" secondAttribute="bottom" constant="5" id="G8D-CQ-Jz0"/> - <constraint firstItem="1aC-fp-mZr" firstAttribute="top" secondItem="fac-Kf-RfH" secondAttribute="top" constant="5" id="eKu-d4-pV6"/> - <constraint firstItem="ocK-4E-xFU" firstAttribute="top" secondItem="fac-Kf-RfH" secondAttribute="top" constant="5" id="lww-OD-hDI"/> - <constraint firstItem="1aC-fp-mZr" firstAttribute="leading" secondItem="fac-Kf-RfH" secondAttribute="leading" id="txa-CC-PtO"/> - <constraint firstItem="ocK-4E-xFU" firstAttribute="leading" secondItem="1aC-fp-mZr" secondAttribute="trailing" constant="2" id="wqp-zA-cT6"/> - </constraints> - <connections> - <outlet property="msgBackground" destination="ocK-4E-xFU" id="H9y-9R-LKw"/> - <outlet property="msgView" destination="Vhy-kA-Ejd" id="u3h-TZ-hWb"/> - <outlet property="photoView" destination="1aC-fp-mZr" id="Nfi-Fw-BBk"/> - <outlet property="statusLabel" destination="oEK-Iz-g9Y" id="pHq-FS-2KY"/> - </connections> - </tableCellView> - <tableCellView identifier="LeftIncomingFileView" id="Nuj-jZ-jYz" userLabel="IMTableCellView" customClass="IMTableCellView"> - <rect key="frame" x="1" y="187" width="369" height="60"/> - <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> - <subviews> - <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" tag="100" translatesAutoresizingMaskIntoConstraints="NO" id="pwI-oq-kbT"> - <rect key="frame" x="0.0" y="25" width="30" height="30"/> - <constraints> - <constraint firstAttribute="height" constant="30" id="QJm-ol-INX"/> - <constraint firstAttribute="width" constant="30" id="UDl-Qt-6CC"/> - </constraints> - <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" id="hOr-EW-mFs"/> - </imageView> - <customView ambiguous="YES" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="jz3-nO-ELg" customClass="MessageBubbleView"> - <rect key="frame" x="55" y="10" width="605" height="40"/> - <subviews> - <button verticalHuggingPriority="750" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="XQQ-T0-W4d" userLabel="Accept"> - <rect key="frame" x="562" y="6" width="44" height="43"/> - <constraints> - <constraint firstAttribute="height" constant="32" id="P6G-6P-gz9"/> - <constraint firstAttribute="width" constant="32" id="Qsy-EG-13y"/> - </constraints> - <buttonCell key="cell" type="push" bezelStyle="rounded" image="ic_action_accept" imagePosition="overlaps" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="k7b-0z-aoG"> - <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> - <font key="font" metaFont="system"/> - </buttonCell> - </button> - <button verticalHuggingPriority="750" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="29n-ZT-ah3" userLabel="Decline"> - <rect key="frame" x="530" y="6" width="44" height="43"/> - <constraints> - <constraint firstAttribute="width" constant="32" id="9YD-8l-0cZ"/> - <constraint firstAttribute="height" constant="32" id="XgO-RV-brJ"/> - </constraints> - <buttonCell key="cell" type="push" bezelStyle="rounded" image="ic_action_cancel" imagePosition="overlaps" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="f7f-ur-JcQ"> - <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> - <font key="font" metaFont="system"/> - </buttonCell> - </button> - <customView horizontalCompressionResistancePriority="250" ambiguous="YES" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="8GC-ys-Mbm" customClass="NSTextView"> - <rect key="frame" x="0.0" y="0.0" width="605" height="40"/> - </customView> - </subviews> - <constraints> - <constraint firstAttribute="trailing" secondItem="XQQ-T0-W4d" secondAttribute="trailing" constant="5" id="2hk-gf-gfB"/> - <constraint firstItem="29n-ZT-ah3" firstAttribute="top" secondItem="jz3-nO-ELg" secondAttribute="top" constant="5" id="87B-dQ-fDK"/> - <constraint firstAttribute="bottom" relation="greaterThanOrEqual" secondItem="29n-ZT-ah3" secondAttribute="bottom" constant="5" id="FCC-r5-Xtg"/> - <constraint firstItem="29n-ZT-ah3" firstAttribute="leading" secondItem="8GC-ys-Mbm" secondAttribute="trailing" constant="5" id="H9e-EQ-3a8"/> - <constraint firstAttribute="bottom" secondItem="8GC-ys-Mbm" secondAttribute="bottom" id="MpT-2b-PGf"/> - <constraint firstItem="8GC-ys-Mbm" firstAttribute="leading" secondItem="jz3-nO-ELg" secondAttribute="leading" id="PPX-PM-xXG"/> - <constraint firstItem="XQQ-T0-W4d" firstAttribute="leading" secondItem="29n-ZT-ah3" secondAttribute="trailing" constant="5" id="WMt-n7-Okr"/> - <constraint firstItem="XQQ-T0-W4d" firstAttribute="top" secondItem="jz3-nO-ELg" secondAttribute="top" constant="5" id="hyU-IL-Qix"/> - <constraint firstItem="8GC-ys-Mbm" firstAttribute="top" secondItem="jz3-nO-ELg" secondAttribute="top" id="la1-tI-IWk"/> - <constraint firstAttribute="bottom" relation="greaterThanOrEqual" secondItem="XQQ-T0-W4d" secondAttribute="bottom" constant="5" id="y6w-xn-DVj"/> - </constraints> - </customView> - </subviews> - <constraints> - <constraint firstItem="pwI-oq-kbT" firstAttribute="leading" secondItem="Nuj-jZ-jYz" secondAttribute="leading" id="0bA-Uq-GtX"/> - <constraint firstItem="jz3-nO-ELg" firstAttribute="leading" secondItem="pwI-oq-kbT" secondAttribute="trailing" constant="2" id="Jm1-ho-yK4"/> - <constraint firstItem="pwI-oq-kbT" firstAttribute="top" secondItem="Nuj-jZ-jYz" secondAttribute="top" constant="5" id="c0v-Re-voc"/> - <constraint firstAttribute="bottom" secondItem="jz3-nO-ELg" secondAttribute="bottom" constant="5" id="cV6-gu-3Py"/> - <constraint firstItem="jz3-nO-ELg" firstAttribute="top" secondItem="Nuj-jZ-jYz" secondAttribute="top" constant="5" id="z9U-3g-HJ7"/> - </constraints> - <connections> - <outlet property="acceptButton" destination="XQQ-T0-W4d" id="ZIY-FY-Yfd"/> - <outlet property="declineButton" destination="29n-ZT-ah3" id="nER-Vf-u41"/> - <outlet property="msgBackground" destination="jz3-nO-ELg" id="pOm-2e-qe5"/> - <outlet property="msgView" destination="8GC-ys-Mbm" id="QMV-Wm-kTb"/> - <outlet property="photoView" destination="pwI-oq-kbT" id="vac-LK-26j"/> - </connections> - </tableCellView> - <tableCellView identifier="RightOngoingFileView" id="PF4-KK-XmV" userLabel="IMTableCellView" customClass="IMTableCellView"> - <rect key="frame" x="1" y="249" width="369" height="60"/> - <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> - <subviews> - <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" tag="100" translatesAutoresizingMaskIntoConstraints="NO" id="ahW-4Q-itX"> - <rect key="frame" x="339" y="25" width="30" height="30"/> - <constraints> - <constraint firstAttribute="width" constant="30" id="Id4-Mv-n2w"/> - <constraint firstAttribute="height" constant="30" id="QRV-ff-qZ8"/> - </constraints> - <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" id="JFW-WQ-a64"/> - </imageView> - <customView ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Lub-Tw-rRg" customClass="MessageBubbleView"> - <rect key="frame" x="5" y="5" width="637" height="50"/> - <subviews> - <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="38z-tG-ed9" userLabel="Decline"> - <rect key="frame" x="36" y="6" width="44" height="43"/> - <constraints> - <constraint firstAttribute="width" constant="32" id="Q8c-6E-ReR"/> - <constraint firstAttribute="height" constant="32" id="Vgt-pt-mXK"/> - </constraints> - <buttonCell key="cell" type="push" bezelStyle="rounded" image="ic_action_cancel" imagePosition="overlaps" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="yR6-oy-w73"> - <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> - <font key="font" metaFont="system"/> - </buttonCell> - </button> - <progressIndicator wantsLayer="YES" horizontalHuggingPriority="750" verticalHuggingPriority="750" maxValue="100" bezeled="NO" indeterminate="YES" style="spinning" translatesAutoresizingMaskIntoConstraints="NO" id="KJY-TZ-7tK"> - <rect key="frame" x="5" y="13" width="32" height="32"/> - <constraints> - <constraint firstAttribute="width" constant="32" id="fVy-Sx-k4Z"/> - </constraints> - </progressIndicator> - <customView horizontalCompressionResistancePriority="250" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="6aR-4J-O5G" customClass="NSTextView"> - <rect key="frame" x="74" y="0.0" width="637" height="50"/> - </customView> - </subviews> - <constraints> - <constraint firstAttribute="bottom" relation="greaterThanOrEqual" secondItem="38z-tG-ed9" secondAttribute="bottom" constant="5" id="9qi-L9-nkY"/> - <constraint firstItem="38z-tG-ed9" firstAttribute="leading" secondItem="KJY-TZ-7tK" secondAttribute="trailing" constant="5" id="SDo-nE-owx"/> - <constraint firstItem="6aR-4J-O5G" firstAttribute="leading" secondItem="38z-tG-ed9" secondAttribute="trailing" id="YgD-0s-4xs"/> - <constraint firstItem="6aR-4J-O5G" firstAttribute="top" secondItem="Lub-Tw-rRg" secondAttribute="top" id="cuo-mu-AN3"/> - <constraint firstItem="KJY-TZ-7tK" firstAttribute="leading" secondItem="Lub-Tw-rRg" secondAttribute="leading" constant="5" id="ppg-Me-UQP"/> - <constraint firstAttribute="bottom" secondItem="6aR-4J-O5G" secondAttribute="bottom" id="sHc-hl-OVd"/> - <constraint firstAttribute="trailing" secondItem="6aR-4J-O5G" secondAttribute="trailing" id="sNA-d2-G44"/> - <constraint firstItem="38z-tG-ed9" firstAttribute="top" secondItem="Lub-Tw-rRg" secondAttribute="top" constant="5" id="tg4-5C-4z4"/> - <constraint firstItem="KJY-TZ-7tK" firstAttribute="centerY" secondItem="38z-tG-ed9" secondAttribute="centerY" id="zGX-hT-NO3"/> - </constraints> - </customView> - </subviews> - <constraints> - <constraint firstItem="Lub-Tw-rRg" firstAttribute="top" secondItem="PF4-KK-XmV" secondAttribute="top" constant="5" id="2Fm-vv-bAx"/> - <constraint firstItem="ahW-4Q-itX" firstAttribute="leading" secondItem="Lub-Tw-rRg" secondAttribute="trailing" constant="2" id="QOd-TE-YI1"/> - <constraint firstAttribute="trailing" secondItem="ahW-4Q-itX" secondAttribute="trailing" id="l9d-YC-vt2"/> - <constraint firstAttribute="bottom" secondItem="Lub-Tw-rRg" secondAttribute="bottom" constant="5" id="nDe-Or-ldd"/> - <constraint firstItem="ahW-4Q-itX" firstAttribute="top" secondItem="PF4-KK-XmV" secondAttribute="top" constant="5" id="tbO-sx-FDX"/> - </constraints> - <connections> - <outlet property="declineButton" destination="38z-tG-ed9" id="U9W-mT-4Jf"/> - <outlet property="msgBackground" destination="Lub-Tw-rRg" id="Z2y-yJ-SGW"/> - <outlet property="msgView" destination="6aR-4J-O5G" id="TOl-5H-CkY"/> - <outlet property="photoView" destination="ahW-4Q-itX" id="bYE-f7-xhT"/> - <outlet property="progressIndicator" destination="KJY-TZ-7tK" id="H3W-o5-hFz"/> - </connections> - </tableCellView> - <tableCellView identifier="LeftOngoingFileView" id="Qg5-zp-vcG" userLabel="IMTableCellView" customClass="IMTableCellView"> - <rect key="frame" x="1" y="311" width="369" height="60"/> - <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> - <subviews> - <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" tag="100" translatesAutoresizingMaskIntoConstraints="NO" id="AlZ-Hp-aSl"> - <rect key="frame" x="0.0" y="25" width="30" height="30"/> - <constraints> - <constraint firstAttribute="height" constant="30" id="QjH-ox-TwS"/> - <constraint firstAttribute="width" constant="30" id="cz1-lF-FqG"/> - </constraints> - <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" id="sAd-1s-adM"/> - </imageView> - <customView ambiguous="YES" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="UnU-Rf-z1l" customClass="MessageBubbleView"> - <rect key="frame" x="55" y="10" width="605" height="40"/> - <subviews> - <button verticalHuggingPriority="750" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="NWW-80-fLk" userLabel="Decline"> - <rect key="frame" x="530" y="6" width="44" height="43"/> - <constraints> - <constraint firstAttribute="height" constant="32" id="3Si-qJ-bbH"/> - <constraint firstAttribute="width" constant="32" id="Woj-aT-sOT"/> - </constraints> - <buttonCell key="cell" type="push" bezelStyle="rounded" image="ic_action_cancel" imagePosition="overlaps" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="bnO-MA-NO6"> - <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> - <font key="font" metaFont="system"/> - </buttonCell> - </button> - <progressIndicator wantsLayer="YES" horizontalHuggingPriority="750" verticalHuggingPriority="750" ambiguous="YES" maxValue="100" bezeled="NO" indeterminate="YES" style="spinning" translatesAutoresizingMaskIntoConstraints="NO" id="k62-1f-mVT" userLabel="Progress Indicator"> - <rect key="frame" x="575" y="13" width="32" height="32"/> - <constraints> - <constraint firstAttribute="width" constant="32" id="Mdm-9P-9UH"/> - <constraint firstAttribute="height" constant="32" id="cvS-EO-hkm"/> - </constraints> - </progressIndicator> - <customView horizontalCompressionResistancePriority="250" ambiguous="YES" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="IR3-0b-k5T" customClass="NSTextView"> - <rect key="frame" x="0.0" y="0.0" width="605" height="40"/> - </customView> - </subviews> - <constraints> - <constraint firstItem="NWW-80-fLk" firstAttribute="leading" secondItem="IR3-0b-k5T" secondAttribute="trailing" constant="5" id="5ea-RK-GQv"/> - <constraint firstAttribute="bottom" secondItem="IR3-0b-k5T" secondAttribute="bottom" id="6eM-Kt-tCV"/> - <constraint firstItem="IR3-0b-k5T" firstAttribute="top" secondItem="UnU-Rf-z1l" secondAttribute="top" id="800-hj-Ab6"/> - <constraint firstItem="IR3-0b-k5T" firstAttribute="leading" secondItem="UnU-Rf-z1l" secondAttribute="leading" id="Fd4-OY-kMA"/> - <constraint firstAttribute="trailing" secondItem="k62-1f-mVT" secondAttribute="trailing" constant="5" id="JjR-hO-mh6"/> - <constraint firstAttribute="bottom" relation="greaterThanOrEqual" secondItem="NWW-80-fLk" secondAttribute="bottom" constant="5" id="Yqf-CR-JrA"/> - <constraint firstItem="k62-1f-mVT" firstAttribute="leading" secondItem="NWW-80-fLk" secondAttribute="trailing" constant="5" id="ca0-N9-BZz"/> - <constraint firstItem="NWW-80-fLk" firstAttribute="top" secondItem="UnU-Rf-z1l" secondAttribute="top" constant="5" id="esP-Pw-T1s"/> - <constraint firstItem="k62-1f-mVT" firstAttribute="centerY" secondItem="NWW-80-fLk" secondAttribute="centerY" id="pMV-qf-Sva"/> - </constraints> - </customView> - </subviews> - <constraints> - <constraint firstItem="AlZ-Hp-aSl" firstAttribute="leading" secondItem="Qg5-zp-vcG" secondAttribute="leading" id="0QM-r7-KDn"/> - <constraint firstItem="UnU-Rf-z1l" firstAttribute="leading" secondItem="AlZ-Hp-aSl" secondAttribute="trailing" constant="2" id="GbX-Qg-cSU"/> - <constraint firstItem="UnU-Rf-z1l" firstAttribute="top" secondItem="Qg5-zp-vcG" secondAttribute="top" constant="5" id="IYI-5a-x6I"/> - <constraint firstItem="AlZ-Hp-aSl" firstAttribute="top" secondItem="Qg5-zp-vcG" secondAttribute="top" constant="5" id="iZb-Gz-V9K"/> - <constraint firstAttribute="bottom" secondItem="UnU-Rf-z1l" secondAttribute="bottom" constant="5" id="lPA-xu-hOR"/> - </constraints> - <connections> - <outlet property="declineButton" destination="NWW-80-fLk" id="01i-kc-693"/> - <outlet property="msgBackground" destination="UnU-Rf-z1l" id="wFR-lZ-el8"/> - <outlet property="msgView" destination="IR3-0b-k5T" id="87k-bF-42h"/> - <outlet property="photoView" destination="AlZ-Hp-aSl" id="xiR-Zr-zDQ"/> - <outlet property="progressIndicator" destination="k62-1f-mVT" id="sfI-Jb-K7G"/> - </connections> - </tableCellView> - <tableCellView identifier="RightFinishedFileView" id="1A2-jz-Bay" userLabel="IMTableCellView" customClass="IMTableCellView"> - <rect key="frame" x="1" y="373" width="369" height="60"/> - <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> - <subviews> - <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" tag="100" translatesAutoresizingMaskIntoConstraints="NO" id="Lsr-r7-7u6"> - <rect key="frame" x="339" y="25" width="30" height="30"/> + <box boxType="custom" borderType="none" cornerRadius="4" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="DSf-SJ-l6k"> + <rect key="frame" x="20" y="23" width="329" height="30"/> + <view key="contentView" id="sEZ-LN-VHO"> + <rect key="frame" x="0.0" y="0.0" width="329" height="30"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> + <subviews> + <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="5dh-9y-rLv"> + <rect key="frame" x="2" y="15" width="133" height="1"/> + <constraints> + <constraint firstAttribute="height" constant="0.5" id="6ji-xM-GHN"/> + </constraints> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" drawsBackground="YES" id="WXl-AK-SWO"> + <font key="font" metaFont="system"/> + <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="gridColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" tag="200" translatesAutoresizingMaskIntoConstraints="NO" id="SMB-Vk-E06"> + <rect key="frame" x="153" y="7" width="24" height="17"/> + <constraints> + <constraint firstAttribute="width" priority="250" constant="20" id="Wod-ib-NVj"/> + </constraints> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="center" id="ahn-Mr-638"> + <font key="font" metaFont="system"/> + <color key="textColor" name="secondaryLabelColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="KCl-GS-5BX"> + <rect key="frame" x="195" y="15" width="132" height="1"/> + <constraints> + <constraint firstAttribute="height" constant="0.5" id="8NI-dj-VYQ"/> + </constraints> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" drawsBackground="YES" id="c7c-zR-Xv2"> + <font key="font" metaFont="system"/> + <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="gridColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + </subviews> + <constraints> + <constraint firstItem="SMB-Vk-E06" firstAttribute="centerY" secondItem="sEZ-LN-VHO" secondAttribute="centerY" id="4hU-BS-mJi"/> + <constraint firstAttribute="trailing" secondItem="KCl-GS-5BX" secondAttribute="trailing" constant="2" id="68l-eq-nmv"/> + <constraint firstItem="5dh-9y-rLv" firstAttribute="centerY" secondItem="sEZ-LN-VHO" secondAttribute="centerY" id="Ejf-Nz-7Dy"/> + <constraint firstItem="SMB-Vk-E06" firstAttribute="centerX" secondItem="sEZ-LN-VHO" secondAttribute="centerX" id="LMS-0P-rxh"/> + <constraint firstItem="KCl-GS-5BX" firstAttribute="centerY" secondItem="sEZ-LN-VHO" secondAttribute="centerY" id="WyB-1e-83d"/> + <constraint firstItem="SMB-Vk-E06" firstAttribute="leading" secondItem="5dh-9y-rLv" secondAttribute="trailing" constant="20" id="c0z-di-nlA"/> + <constraint firstItem="5dh-9y-rLv" firstAttribute="leading" secondItem="sEZ-LN-VHO" secondAttribute="leading" constant="2" id="c1L-Ca-29E"/> + <constraint firstItem="KCl-GS-5BX" firstAttribute="leading" secondItem="SMB-Vk-E06" secondAttribute="trailing" constant="20" id="e6C-5O-cdY"/> + </constraints> + </view> <constraints> - <constraint firstAttribute="width" constant="30" id="eGt-tj-De4"/> - <constraint firstAttribute="height" constant="30" id="gaj-Cf-JqG"/> + <constraint firstAttribute="height" constant="30" id="VFG-7p-7Hg"/> </constraints> - <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" id="wX7-ov-hWR"/> - </imageView> - <customView ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="ZXS-xe-37A" customClass="MessageBubbleView"> - <rect key="frame" x="5" y="5" width="637" height="50"/> - <subviews> - <customView horizontalCompressionResistancePriority="250" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="2ym-Ad-jYp" customClass="NSTextView"> - <rect key="frame" x="48" y="0.0" width="637" height="50"/> - </customView> - <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="c5d-Vg-wak" userLabel="Status Label"> - <rect key="frame" x="3" y="17" width="47" height="17"/> - <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="center" title="Status" id="dId-t9-Tys"> - <font key="font" metaFont="system"/> - <color key="textColor" name="tertiaryLabelColor" catalog="System" colorSpace="catalog"/> - <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> - </textFieldCell> - </textField> - </subviews> + </box> + <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" tag="100" translatesAutoresizingMaskIntoConstraints="NO" id="Wyd-h8-NpR" userLabel="ContactInteractionLabel"> + <rect key="frame" x="166" y="11" width="37" height="17"/> <constraints> - <constraint firstAttribute="trailing" secondItem="2ym-Ad-jYp" secondAttribute="trailing" id="Coe-JS-JsY"/> - <constraint firstItem="2ym-Ad-jYp" firstAttribute="leading" secondItem="c5d-Vg-wak" secondAttribute="trailing" id="J3v-LQ-uTB"/> - <constraint firstAttribute="bottom" secondItem="2ym-Ad-jYp" secondAttribute="bottom" id="XDh-gW-BPw"/> - <constraint firstItem="2ym-Ad-jYp" firstAttribute="top" secondItem="ZXS-xe-37A" secondAttribute="top" id="gyN-GP-4iA"/> - <constraint firstItem="c5d-Vg-wak" firstAttribute="centerY" secondItem="ZXS-xe-37A" secondAttribute="centerY" id="hEy-9U-b9S"/> - <constraint firstItem="c5d-Vg-wak" firstAttribute="leading" secondItem="ZXS-xe-37A" secondAttribute="leading" constant="5" id="yPK-ia-xEX"/> + <constraint firstAttribute="height" constant="17" id="blq-Kh-Y2Y"/> </constraints> - </customView> - </subviews> - <constraints> - <constraint firstAttribute="bottom" secondItem="ZXS-xe-37A" secondAttribute="bottom" constant="5" id="6rK-6i-QX1"/> - <constraint firstItem="Lsr-r7-7u6" firstAttribute="top" secondItem="1A2-jz-Bay" secondAttribute="top" constant="5" id="ARZ-uc-YzK"/> - <constraint firstItem="ZXS-xe-37A" firstAttribute="top" secondItem="1A2-jz-Bay" secondAttribute="top" constant="5" id="Uo4-6U-VPE"/> - <constraint firstItem="Lsr-r7-7u6" firstAttribute="leading" secondItem="ZXS-xe-37A" secondAttribute="trailing" constant="2" id="Y7g-Qj-5AZ"/> - <constraint firstAttribute="trailing" secondItem="Lsr-r7-7u6" secondAttribute="trailing" id="qMe-Ab-ZwA"/> - </constraints> - <connections> - <outlet property="msgBackground" destination="ZXS-xe-37A" id="oB7-O3-e9e"/> - <outlet property="msgView" destination="2ym-Ad-jYp" id="FAe-Qs-Ktc"/> - <outlet property="photoView" destination="Lsr-r7-7u6" id="6f6-Nw-b6j"/> - <outlet property="statusLabel" destination="c5d-Vg-wak" id="PXv-Zh-A8v"/> - </connections> - </tableCellView> - <tableCellView identifier="GenericInteractionView" misplaced="YES" id="0tt-a5-Dex" userLabel="GenericInteractionView"> - <rect key="frame" x="1" y="435" width="369" height="22"/> - <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> - <subviews> - <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" tag="100" translatesAutoresizingMaskIntoConstraints="NO" id="Wyd-h8-NpR" userLabel="ContactInteractionLabel"> - <rect key="frame" x="166" y="6" width="37" height="17"/> <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Label" id="GBy-HF-JeP"> <font key="font" metaFont="systemLight" size="13"/> <color key="textColor" name="secondaryLabelColor" catalog="System" colorSpace="catalog"/> <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> </textFieldCell> </textField> - <box verticalHuggingPriority="750" boxType="separator" translatesAutoresizingMaskIntoConstraints="NO" id="gW2-ug-GL4"> - <rect key="frame" x="60" y="-2" width="250" height="5"/> - <constraints> - <constraint firstAttribute="width" constant="250" id="Erp-iC-ICa"/> - </constraints> - </box> </subviews> <constraints> - <constraint firstItem="Wyd-h8-NpR" firstAttribute="top" secondItem="0tt-a5-Dex" secondAttribute="top" constant="5" id="MmK-0A-KJH"/> - <constraint firstAttribute="bottom" secondItem="gW2-ug-GL4" secondAttribute="bottom" id="UkS-g6-Nc5"/> + <constraint firstItem="DSf-SJ-l6k" firstAttribute="leading" secondItem="0tt-a5-Dex" secondAttribute="leading" constant="20" id="7ds-Qq-U8q"/> + <constraint firstItem="DSf-SJ-l6k" firstAttribute="top" secondItem="0tt-a5-Dex" secondAttribute="top" constant="7" id="9zu-Oh-w26"/> + <constraint firstItem="DSf-SJ-l6k" firstAttribute="bottom" secondItem="Wyd-h8-NpR" secondAttribute="top" constant="5" id="RB3-cN-Bso"/> <constraint firstItem="Wyd-h8-NpR" firstAttribute="centerX" secondItem="0tt-a5-Dex" secondAttribute="centerX" id="X7O-3d-Apd"/> - <constraint firstItem="gW2-ug-GL4" firstAttribute="centerX" secondItem="0tt-a5-Dex" secondAttribute="centerX" id="ly5-vL-ZG9"/> - <constraint firstItem="gW2-ug-GL4" firstAttribute="top" secondItem="Wyd-h8-NpR" secondAttribute="bottom" constant="5" id="tYg-hG-6z1"/> + <constraint firstAttribute="trailing" secondItem="DSf-SJ-l6k" secondAttribute="trailing" constant="20" id="iXU-70-hKW"/> </constraints> </tableCellView> </prototypeCellViews> @@ -1159,14 +1010,13 @@ <constraint firstItem="o0i-7W-5fA" firstAttribute="leading" secondItem="TdD-3L-553" secondAttribute="leading" id="534-UB-MWH"/> <constraint firstItem="kW2-Cx-fNv" firstAttribute="leading" secondItem="OBX-o0-u1k" secondAttribute="trailing" constant="8" id="5sg-0N-YSw"/> <constraint firstAttribute="width" relation="lessThanOrEqual" constant="400" id="6oW-C7-uny"/> - <constraint firstItem="OBX-o0-u1k" firstAttribute="top" secondItem="o0i-7W-5fA" secondAttribute="bottom" id="A0X-gd-5GU"/> <constraint firstAttribute="bottom" secondItem="kW2-Cx-fNv" secondAttribute="bottom" constant="20" id="EeC-o1-xNE"/> <constraint firstAttribute="width" relation="greaterThanOrEqual" constant="350" id="KI6-XT-afu"/> <constraint firstItem="o0i-7W-5fA" firstAttribute="top" secondItem="TdD-3L-553" secondAttribute="top" constant="2" id="bkX-mz-nw2"/> <constraint firstItem="o0i-7W-5fA" firstAttribute="top" secondItem="TdD-3L-553" secondAttribute="top" constant="2" id="c2j-uq-N5b"/> <constraint firstItem="o0i-7W-5fA" firstAttribute="leading" secondItem="TdD-3L-553" secondAttribute="leading" id="dE6-v4-yd0"/> <constraint firstAttribute="bottom" secondItem="OBX-o0-u1k" secondAttribute="bottom" constant="20" id="eOH-Wv-Zuo"/> - <constraint firstItem="OBX-o0-u1k" firstAttribute="top" secondItem="o0i-7W-5fA" secondAttribute="bottom" id="ewb-Bp-6rQ"/> + <constraint firstItem="OBX-o0-u1k" firstAttribute="top" secondItem="o0i-7W-5fA" secondAttribute="bottom" constant="17" id="ewb-Bp-6rQ"/> <constraint firstAttribute="trailing" secondItem="kW2-Cx-fNv" secondAttribute="trailing" constant="20" id="g3z-YY-hyn"/> <constraint firstAttribute="trailing" secondItem="o0i-7W-5fA" secondAttribute="trailing" id="o2T-rP-yQ2"/> <constraint firstItem="OBX-o0-u1k" firstAttribute="leading" secondItem="TdD-3L-553" secondAttribute="leading" constant="20" id="wTD-wE-axZ"/> diff --git a/ui/Base.lproj/MessageCells.xib b/ui/Base.lproj/MessageCells.xib new file mode 100644 index 0000000000000000000000000000000000000000..8eb516a0a715f628ca730fb78aa8c3b3d8aa53af --- /dev/null +++ b/ui/Base.lproj/MessageCells.xib @@ -0,0 +1,717 @@ +<?xml version="1.0" encoding="UTF-8"?> +<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="13771" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct"> + <dependencies> + <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="13771"/> + <capability name="box content view" minToolsVersion="7.0"/> + <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> + <capability name="system font weights other than Regular or Bold" minToolsVersion="7.0"/> + </dependencies> + <objects> + <customObject id="-2" userLabel="File's Owner"/> + <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/> + <customObject id="-3" userLabel="Application" customClass="NSObject"/> + <tableCellView identifier="LeftIncomingFileView" id="5Cf-is-eX6" userLabel="IMTableCellView" customClass="IMTableCellView"> + <rect key="frame" x="0.0" y="0.0" width="400" height="114"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> + <subviews> + <box boxType="custom" borderType="none" cornerRadius="4" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="Ko5-2g-foK"> + <rect key="frame" x="0.0" y="80" width="400" height="34"/> + <view key="contentView" id="A5o-ge-tn7"> + <rect key="frame" x="0.0" y="0.0" width="400" height="34"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> + <subviews> + <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="hwh-Yh-uCt"> + <rect key="frame" x="2" y="17" width="168" height="1"/> + <constraints> + <constraint firstAttribute="height" constant="0.5" id="jI8-zo-QHh"/> + </constraints> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" drawsBackground="YES" id="Qqd-oo-D8X"> + <font key="font" metaFont="system"/> + <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="gridColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="EyK-S9-kZz"> + <rect key="frame" x="188" y="9" width="24" height="17"/> + <constraints> + <constraint firstAttribute="width" priority="250" constant="20" id="h3Y-F2-Nvs"/> + </constraints> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="center" id="vn0-ue-s4d"> + <font key="font" metaFont="system"/> + <color key="textColor" name="secondaryLabelColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="eRd-Hj-IT1"> + <rect key="frame" x="230" y="17" width="168" height="1"/> + <constraints> + <constraint firstAttribute="height" constant="0.5" id="B48-aY-cf8"/> + </constraints> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" drawsBackground="YES" id="lIV-gA-jEu"> + <font key="font" metaFont="system"/> + <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="gridColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + </subviews> + <constraints> + <constraint firstItem="hwh-Yh-uCt" firstAttribute="centerY" secondItem="A5o-ge-tn7" secondAttribute="centerY" id="0if-zK-K77"/> + <constraint firstItem="eRd-Hj-IT1" firstAttribute="centerY" secondItem="A5o-ge-tn7" secondAttribute="centerY" id="1cz-ku-LaP"/> + <constraint firstItem="EyK-S9-kZz" firstAttribute="leading" secondItem="hwh-Yh-uCt" secondAttribute="trailing" constant="20" id="84I-sQ-NUX"/> + <constraint firstAttribute="trailing" secondItem="eRd-Hj-IT1" secondAttribute="trailing" constant="2" id="LKA-54-hRe"/> + <constraint firstItem="hwh-Yh-uCt" firstAttribute="leading" secondItem="A5o-ge-tn7" secondAttribute="leading" constant="2" id="UhH-8u-zlP"/> + <constraint firstItem="EyK-S9-kZz" firstAttribute="centerY" secondItem="A5o-ge-tn7" secondAttribute="centerY" id="Xhn-0Q-8PC"/> + <constraint firstItem="EyK-S9-kZz" firstAttribute="centerX" secondItem="A5o-ge-tn7" secondAttribute="centerX" id="YY7-Iv-pYJ"/> + <constraint firstItem="eRd-Hj-IT1" firstAttribute="leading" secondItem="EyK-S9-kZz" secondAttribute="trailing" constant="20" id="tu5-Gx-vvn"/> + </constraints> + </view> + <constraints> + <constraint firstAttribute="height" constant="34" id="bZw-wN-WPu"/> + </constraints> + </box> + <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="bbY-3f-2Wi"> + <rect key="frame" x="0.0" y="0.0" width="30" height="30"/> + <constraints> + <constraint firstAttribute="height" constant="30" id="N8L-xN-Aqb"/> + <constraint firstAttribute="width" constant="30" id="is6-bX-cMa"/> + </constraints> + <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" id="l50-cR-bp3"/> + </imageView> + <view translatesAutoresizingMaskIntoConstraints="NO" id="9bA-XZ-y8X" customClass="MessageBubbleView"> + <rect key="frame" x="40" y="0.0" width="250" height="80"/> + <subviews> + <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="KEd-qS-Nsi"> + <rect key="frame" x="15" y="45" width="30" height="20"/> + <constraints> + <constraint firstAttribute="height" constant="20" id="PXU-Zw-hZr"/> + <constraint firstAttribute="width" constant="30" id="wtc-7f-D4u"/> + </constraints> + <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageAlignment="left" imageScaling="proportionallyDown" image="ic_attachment" id="Jpz-4x-jYM"/> + </imageView> + <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="y5X-JW-0Po"> + <rect key="frame" x="53" y="48" width="184" height="17"/> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" id="c7X-zM-nQW"> + <font key="font" metaFont="systemSemibold" size="13"/> + <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="829-to-lM4"> + <rect key="frame" x="15" y="9" width="100" height="19"/> + <constraints> + <constraint firstAttribute="width" constant="100" id="kjH-tU-1tP"/> + </constraints> + <buttonCell key="cell" type="roundRect" title="Accept" bezelStyle="roundedRect" image="ic_file_upload" imagePosition="left" alignment="center" borderStyle="border" imageScaling="proportionallyUpOrDown" inset="2" id="tBq-Qe-bEm"> + <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> + <font key="font" metaFont="cellTitle"/> + </buttonCell> + </button> + <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="rGw-yF-hxm"> + <rect key="frame" x="125" y="9" width="100" height="19"/> + <constraints> + <constraint firstAttribute="width" constant="100" id="Iuc-mg-eSf"/> + </constraints> + <buttonCell key="cell" type="roundRect" title="Refuse" bezelStyle="roundedRect" image="ic_action_cancel" imagePosition="left" alignment="center" borderStyle="border" imageScaling="proportionallyUpOrDown" inset="2" id="QGs-MO-mVi"> + <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> + <font key="font" metaFont="cellTitle"/> + </buttonCell> + </button> + <box verticalHuggingPriority="750" boxType="separator" translatesAutoresizingMaskIntoConstraints="NO" id="yhT-5T-phc"> + <rect key="frame" x="15" y="30" width="220" height="5"/> + </box> + </subviews> + <constraints> + <constraint firstItem="yhT-5T-phc" firstAttribute="top" secondItem="y5X-JW-0Po" secondAttribute="bottom" constant="15" id="5Un-Sj-oIC"/> + <constraint firstItem="829-to-lM4" firstAttribute="leading" secondItem="9bA-XZ-y8X" secondAttribute="leading" constant="15" id="8aS-EQ-vLE"/> + <constraint firstAttribute="bottom" secondItem="829-to-lM4" secondAttribute="bottom" constant="10" id="CGV-3x-v5N"/> + <constraint firstItem="y5X-JW-0Po" firstAttribute="top" secondItem="9bA-XZ-y8X" secondAttribute="top" constant="15" id="CiF-Ch-iQ0"/> + <constraint firstItem="KEd-qS-Nsi" firstAttribute="top" secondItem="9bA-XZ-y8X" secondAttribute="top" constant="15" id="Sy3-bH-Tuj"/> + <constraint firstAttribute="trailing" secondItem="y5X-JW-0Po" secondAttribute="trailing" constant="15" id="Ugk-Z2-Hfc"/> + <constraint firstItem="rGw-yF-hxm" firstAttribute="leading" secondItem="829-to-lM4" secondAttribute="trailing" constant="10" id="czr-6I-3vm"/> + <constraint firstAttribute="bottom" secondItem="rGw-yF-hxm" secondAttribute="bottom" constant="10" id="dAg-f3-qTv"/> + <constraint firstItem="KEd-qS-Nsi" firstAttribute="leading" secondItem="9bA-XZ-y8X" secondAttribute="leading" constant="15" id="ehc-5r-buf"/> + <constraint firstAttribute="width" constant="250" id="hA5-MX-rda"/> + <constraint firstItem="yhT-5T-phc" firstAttribute="leading" secondItem="9bA-XZ-y8X" secondAttribute="leading" constant="15" id="hc2-SM-sFd"/> + <constraint firstItem="y5X-JW-0Po" firstAttribute="leading" secondItem="KEd-qS-Nsi" secondAttribute="trailing" constant="10" id="su5-Tj-RBb"/> + <constraint firstAttribute="trailing" secondItem="yhT-5T-phc" secondAttribute="trailing" constant="15" id="zWA-zN-oog"/> + </constraints> + </view> + </subviews> + <constraints> + <constraint firstItem="Ko5-2g-foK" firstAttribute="leading" secondItem="5Cf-is-eX6" secondAttribute="leading" id="GwI-fo-Kve"/> + <constraint firstItem="9bA-XZ-y8X" firstAttribute="leading" secondItem="bbY-3f-2Wi" secondAttribute="trailing" constant="10" id="Tcf-yA-Lfr"/> + <constraint firstAttribute="bottom" secondItem="9bA-XZ-y8X" secondAttribute="bottom" id="bBT-hT-3RW"/> + <constraint firstItem="9bA-XZ-y8X" firstAttribute="top" secondItem="Ko5-2g-foK" secondAttribute="bottom" id="cTn-Kq-Jrp"/> + <constraint firstItem="bbY-3f-2Wi" firstAttribute="leading" secondItem="5Cf-is-eX6" secondAttribute="leading" id="ocm-97-AJA"/> + <constraint firstItem="Ko5-2g-foK" firstAttribute="top" secondItem="5Cf-is-eX6" secondAttribute="top" id="s1G-pc-aRg"/> + <constraint firstAttribute="trailing" secondItem="Ko5-2g-foK" secondAttribute="trailing" id="sSD-in-KTu"/> + <constraint firstItem="bbY-3f-2Wi" firstAttribute="bottom" secondItem="9bA-XZ-y8X" secondAttribute="bottom" id="yK5-TI-qJr"/> + </constraints> + <connections> + <outlet property="acceptButton" destination="829-to-lM4" id="rZu-K5-leg"/> + <outlet property="declineButton" destination="rGw-yF-hxm" id="cqg-aF-bBK"/> + <outlet property="photoView" destination="bbY-3f-2Wi" id="jZb-ne-NZj"/> + <outlet property="timeBox" destination="Ko5-2g-foK" id="wNa-aC-Y5o"/> + <outlet property="timeLabel" destination="EyK-S9-kZz" id="slc-h9-LP4"/> + <outlet property="transferedFileName" destination="y5X-JW-0Po" id="pYo-0M-qv9"/> + </connections> + <point key="canvasLocation" x="139" y="167"/> + </tableCellView> + <tableCellView identifier="LeftFinishedFileView" id="eW8-NR-350" userLabel="IMTableCellView" customClass="IMTableCellView"> + <rect key="frame" x="0.0" y="0.0" width="400" height="172"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> + <subviews> + <box boxType="custom" borderType="none" cornerRadius="4" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="EAm-7Z-ubs"> + <rect key="frame" x="0.0" y="138" width="400" height="34"/> + <view key="contentView" id="vWe-2x-kXT"> + <rect key="frame" x="0.0" y="0.0" width="400" height="34"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> + <subviews> + <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="fgj-n7-0gT"> + <rect key="frame" x="2" y="17" width="168" height="1"/> + <constraints> + <constraint firstAttribute="height" constant="0.5" id="mgI-qs-K95"/> + </constraints> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" drawsBackground="YES" id="WaT-eW-huB"> + <font key="font" metaFont="system"/> + <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="gridColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="JUf-er-n2R"> + <rect key="frame" x="188" y="9" width="24" height="17"/> + <constraints> + <constraint firstAttribute="width" priority="250" constant="20" id="c90-0g-OVN"/> + </constraints> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="center" id="xYI-Og-qqV"> + <font key="font" metaFont="system"/> + <color key="textColor" name="secondaryLabelColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Hdp-Uj-WNT"> + <rect key="frame" x="230" y="17" width="168" height="1"/> + <constraints> + <constraint firstAttribute="height" constant="0.5" id="7qX-zT-yJP"/> + </constraints> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" drawsBackground="YES" id="EfP-Tf-gfm"> + <font key="font" metaFont="system"/> + <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="gridColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + </subviews> + <constraints> + <constraint firstItem="fgj-n7-0gT" firstAttribute="centerY" secondItem="vWe-2x-kXT" secondAttribute="centerY" id="39d-3g-AIX"/> + <constraint firstItem="Hdp-Uj-WNT" firstAttribute="leading" secondItem="JUf-er-n2R" secondAttribute="trailing" constant="20" id="N9t-FS-hRw"/> + <constraint firstItem="JUf-er-n2R" firstAttribute="centerY" secondItem="vWe-2x-kXT" secondAttribute="centerY" id="YR9-c8-hTx"/> + <constraint firstItem="JUf-er-n2R" firstAttribute="leading" secondItem="fgj-n7-0gT" secondAttribute="trailing" constant="20" id="bT5-G9-EOP"/> + <constraint firstItem="Hdp-Uj-WNT" firstAttribute="centerY" secondItem="vWe-2x-kXT" secondAttribute="centerY" id="bnu-Si-BTg"/> + <constraint firstAttribute="trailing" secondItem="Hdp-Uj-WNT" secondAttribute="trailing" constant="2" id="exH-Tb-yGx"/> + <constraint firstItem="JUf-er-n2R" firstAttribute="centerX" secondItem="vWe-2x-kXT" secondAttribute="centerX" id="fwY-z1-u4c"/> + <constraint firstItem="fgj-n7-0gT" firstAttribute="leading" secondItem="vWe-2x-kXT" secondAttribute="leading" constant="2" id="nJZ-CB-tem"/> + </constraints> + </view> + <constraints> + <constraint firstAttribute="height" constant="34" id="BjR-11-ho1"/> + </constraints> + </box> + <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="BPl-0q-GSo"> + <rect key="frame" x="0.0" y="0.0" width="30" height="30"/> + <constraints> + <constraint firstAttribute="height" constant="30" id="Mn7-6M-17m"/> + <constraint firstAttribute="width" constant="30" id="k7Q-di-xiC"/> + </constraints> + <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" id="CbP-fL-hnq"/> + </imageView> + <view translatesAutoresizingMaskIntoConstraints="NO" id="rfH-MI-dNw" customClass="MessageBubbleView"> + <rect key="frame" x="40" y="0.0" width="250" height="138"/> + <subviews> + <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="gXD-VF-3Sl"> + <rect key="frame" x="15" y="103" width="30" height="20"/> + <constraints> + <constraint firstAttribute="width" constant="30" id="6H8-jT-mn3"/> + <constraint firstAttribute="height" constant="20" id="R4X-bF-Ge1"/> + </constraints> + <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageAlignment="left" imageScaling="proportionallyDown" image="ic_attachment" id="yjj-R0-GLl"/> + </imageView> + <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="AOC-mE-DQI"> + <rect key="frame" x="53" y="106" width="184" height="17"/> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" id="BU5-xs-IBT"> + <font key="font" metaFont="systemSemibold" size="13"/> + <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="ldC-Xq-oV5"> + <rect key="frame" x="18" y="10" width="4" height="17"/> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="left" id="Mey-Zj-Gqc"> + <font key="font" metaFont="system"/> + <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + <box verticalHuggingPriority="750" boxType="separator" translatesAutoresizingMaskIntoConstraints="NO" id="ypT-pD-ceZ"> + <rect key="frame" x="15" y="85" width="220" height="5"/> + </box> + </subviews> + <constraints> + <constraint firstItem="AOC-mE-DQI" firstAttribute="leading" secondItem="gXD-VF-3Sl" secondAttribute="trailing" constant="10" id="1DK-mk-Ep3"/> + <constraint firstItem="AOC-mE-DQI" firstAttribute="top" secondItem="rfH-MI-dNw" secondAttribute="top" constant="15" id="9BN-fl-qze"/> + <constraint firstItem="gXD-VF-3Sl" firstAttribute="leading" secondItem="rfH-MI-dNw" secondAttribute="leading" constant="15" id="Qzf-1C-Nkx"/> + <constraint firstItem="gXD-VF-3Sl" firstAttribute="top" secondItem="rfH-MI-dNw" secondAttribute="top" constant="15" id="RGa-mT-1Zc"/> + <constraint firstItem="ldC-Xq-oV5" firstAttribute="leading" secondItem="rfH-MI-dNw" secondAttribute="leading" constant="20" id="cJD-KH-VU4"/> + <constraint firstAttribute="width" constant="250" id="e3b-nY-oeV"/> + <constraint firstAttribute="trailing" secondItem="ypT-pD-ceZ" secondAttribute="trailing" constant="15" id="hhF-wq-lKL"/> + <constraint firstItem="ypT-pD-ceZ" firstAttribute="top" secondItem="gXD-VF-3Sl" secondAttribute="bottom" constant="15" id="p33-XJ-GjX"/> + <constraint firstItem="ypT-pD-ceZ" firstAttribute="leading" secondItem="rfH-MI-dNw" secondAttribute="leading" constant="15" id="qdS-RJ-JAB"/> + <constraint firstAttribute="trailing" secondItem="AOC-mE-DQI" secondAttribute="trailing" constant="15" id="tYA-nB-27I"/> + <constraint firstAttribute="bottom" secondItem="ldC-Xq-oV5" secondAttribute="bottom" constant="10" id="tmi-TO-YiG"/> + </constraints> + </view> + <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="7UD-vn-oi8"> + <rect key="frame" x="40" y="0.0" width="0.0" height="138"/> + <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" id="u22-jR-dkf"/> + </imageView> + </subviews> + <constraints> + <constraint firstItem="rfH-MI-dNw" firstAttribute="leading" secondItem="BPl-0q-GSo" secondAttribute="trailing" constant="10" id="611-lJ-BBQ"/> + <constraint firstItem="rfH-MI-dNw" firstAttribute="top" secondItem="EAm-7Z-ubs" secondAttribute="bottom" id="HIj-cX-wOT"/> + <constraint firstItem="EAm-7Z-ubs" firstAttribute="leading" secondItem="eW8-NR-350" secondAttribute="leading" id="JhW-lj-cC3"/> + <constraint firstAttribute="trailing" secondItem="EAm-7Z-ubs" secondAttribute="trailing" id="Q5D-pe-Xft"/> + <constraint firstItem="EAm-7Z-ubs" firstAttribute="top" secondItem="eW8-NR-350" secondAttribute="top" id="W4u-5d-H5k"/> + <constraint firstItem="BPl-0q-GSo" firstAttribute="leading" secondItem="eW8-NR-350" secondAttribute="leading" id="Y7M-PN-14V"/> + <constraint firstItem="7UD-vn-oi8" firstAttribute="leading" secondItem="BPl-0q-GSo" secondAttribute="trailing" constant="10" id="a31-m9-ozj"/> + <constraint firstItem="7UD-vn-oi8" firstAttribute="top" secondItem="EAm-7Z-ubs" secondAttribute="bottom" id="cRN-Cx-mx2"/> + <constraint firstAttribute="bottom" secondItem="7UD-vn-oi8" secondAttribute="bottom" id="mBE-yc-RCa"/> + <constraint firstItem="rfH-MI-dNw" firstAttribute="bottom" secondItem="BPl-0q-GSo" secondAttribute="bottom" id="s5i-QD-LqE"/> + <constraint firstAttribute="bottom" secondItem="rfH-MI-dNw" secondAttribute="bottom" id="vyt-jC-mVO"/> + </constraints> + <connections> + <outlet property="msgBackground" destination="rfH-MI-dNw" id="AJp-Zq-XG8"/> + <outlet property="photoView" destination="BPl-0q-GSo" id="6XR-pb-GjY"/> + <outlet property="statusLabel" destination="ldC-Xq-oV5" id="qmg-YD-p6y"/> + <outlet property="timeBox" destination="EAm-7Z-ubs" id="4bu-p8-yDg"/> + <outlet property="timeLabel" destination="JUf-er-n2R" id="mdy-VT-uV5"/> + <outlet property="transferedFileName" destination="AOC-mE-DQI" id="Z7q-DD-ni5"/> + <outlet property="transferedImage" destination="7UD-vn-oi8" id="YYT-DU-itS"/> + </connections> + <point key="canvasLocation" x="132" y="-22"/> + </tableCellView> + <tableCellView identifier="LeftOngoingFileView" id="AlH-xb-GaC" userLabel="IMTableCellView" customClass="IMTableCellView"> + <rect key="frame" x="0.0" y="0.0" width="400" height="114"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> + <subviews> + <box boxType="custom" borderType="none" cornerRadius="4" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="dDX-sZ-ylI"> + <rect key="frame" x="0.0" y="80" width="400" height="34"/> + <view key="contentView" id="G6u-o0-5uR"> + <rect key="frame" x="0.0" y="0.0" width="400" height="34"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> + <subviews> + <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="FnD-zZ-o1F"> + <rect key="frame" x="2" y="17" width="168" height="1"/> + <constraints> + <constraint firstAttribute="height" constant="0.5" id="C5N-90-PUE"/> + </constraints> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" drawsBackground="YES" id="iO5-pR-BHa"> + <font key="font" metaFont="system"/> + <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="gridColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="sRg-94-yH1"> + <rect key="frame" x="188" y="9" width="24" height="17"/> + <constraints> + <constraint firstAttribute="width" priority="250" constant="20" id="mLV-uI-q6J"/> + </constraints> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="center" id="pfw-fC-4Xm"> + <font key="font" metaFont="system"/> + <color key="textColor" name="secondaryLabelColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="TQZ-fe-D3x"> + <rect key="frame" x="230" y="17" width="168" height="1"/> + <constraints> + <constraint firstAttribute="height" constant="0.5" id="oAJ-3t-Kfa"/> + </constraints> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" drawsBackground="YES" id="A3l-7R-sEr"> + <font key="font" metaFont="system"/> + <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="gridColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + </subviews> + <constraints> + <constraint firstItem="TQZ-fe-D3x" firstAttribute="centerY" secondItem="G6u-o0-5uR" secondAttribute="centerY" id="3a8-08-BVx"/> + <constraint firstItem="sRg-94-yH1" firstAttribute="centerX" secondItem="G6u-o0-5uR" secondAttribute="centerX" id="8c1-Tj-0GO"/> + <constraint firstItem="sRg-94-yH1" firstAttribute="leading" secondItem="FnD-zZ-o1F" secondAttribute="trailing" constant="20" id="GSI-S2-Lek"/> + <constraint firstItem="TQZ-fe-D3x" firstAttribute="leading" secondItem="sRg-94-yH1" secondAttribute="trailing" constant="20" id="Gi8-F8-PVS"/> + <constraint firstItem="FnD-zZ-o1F" firstAttribute="leading" secondItem="G6u-o0-5uR" secondAttribute="leading" constant="2" id="MeX-Gb-qWD"/> + <constraint firstAttribute="trailing" secondItem="TQZ-fe-D3x" secondAttribute="trailing" constant="2" id="e0M-Lo-Ofp"/> + <constraint firstItem="sRg-94-yH1" firstAttribute="centerY" secondItem="G6u-o0-5uR" secondAttribute="centerY" id="p0Z-I5-USk"/> + <constraint firstItem="FnD-zZ-o1F" firstAttribute="centerY" secondItem="G6u-o0-5uR" secondAttribute="centerY" id="upC-91-USZ"/> + </constraints> + </view> + <constraints> + <constraint firstAttribute="height" constant="34" id="yXW-Pu-K5m"/> + </constraints> + </box> + <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="ocf-Pp-J4F"> + <rect key="frame" x="0.0" y="0.0" width="30" height="30"/> + <constraints> + <constraint firstAttribute="width" constant="30" id="3w6-xX-tEe"/> + <constraint firstAttribute="height" constant="30" id="C6C-V8-W2b"/> + </constraints> + <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" id="fhy-Vs-ZoW"/> + </imageView> + <view translatesAutoresizingMaskIntoConstraints="NO" id="YEa-1b-wNo" customClass="MessageBubbleView"> + <rect key="frame" x="40" y="0.0" width="250" height="80"/> + <subviews> + <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="Wu8-Ho-MOI"> + <rect key="frame" x="15" y="45" width="30" height="20"/> + <constraints> + <constraint firstAttribute="height" constant="20" id="1dL-ZM-MQf"/> + <constraint firstAttribute="width" constant="30" id="oVv-hj-4mx"/> + </constraints> + <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageAlignment="left" imageScaling="proportionallyDown" image="ic_attachment" id="q2e-Jw-ifg"/> + </imageView> + <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="xyX-lk-ARU"> + <rect key="frame" x="53" y="48" width="184" height="17"/> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" id="9cm-bt-fIw"> + <font key="font" metaFont="systemSemibold" size="13"/> + <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="3gN-Us-HWE"> + <rect key="frame" x="130" y="9" width="100" height="19"/> + <constraints> + <constraint firstAttribute="width" constant="100" id="8tO-4c-fca"/> + </constraints> + <buttonCell key="cell" type="roundRect" title="Cancel" bezelStyle="roundedRect" image="ic_action_cancel" imagePosition="left" alignment="center" borderStyle="border" imageScaling="proportionallyUpOrDown" inset="2" id="1c6-BK-hfV"> + <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> + <font key="font" metaFont="cellTitle"/> + </buttonCell> + </button> + <progressIndicator wantsLayer="YES" maxValue="100" indeterminate="YES" style="bar" translatesAutoresizingMaskIntoConstraints="NO" id="7hN-OZ-vA4"> + <rect key="frame" x="20" y="9" width="100" height="20"/> + <constraints> + <constraint firstAttribute="width" constant="100" id="bWZ-M1-Nuh"/> + </constraints> + </progressIndicator> + <box verticalHuggingPriority="750" boxType="separator" translatesAutoresizingMaskIntoConstraints="NO" id="9ze-gS-MRW"> + <rect key="frame" x="15" y="30" width="220" height="5"/> + </box> + </subviews> + <constraints> + <constraint firstItem="Wu8-Ho-MOI" firstAttribute="leading" secondItem="YEa-1b-wNo" secondAttribute="leading" constant="15" id="0ke-HM-RMP"/> + <constraint firstAttribute="bottom" secondItem="3gN-Us-HWE" secondAttribute="bottom" constant="10" id="1ZJ-CT-6vY"/> + <constraint firstItem="9ze-gS-MRW" firstAttribute="top" secondItem="xyX-lk-ARU" secondAttribute="bottom" constant="15" id="5I2-vg-fsS"/> + <constraint firstItem="9ze-gS-MRW" firstAttribute="leading" secondItem="YEa-1b-wNo" secondAttribute="leading" constant="15" id="Ky3-fl-MGA"/> + <constraint firstItem="7hN-OZ-vA4" firstAttribute="leading" secondItem="YEa-1b-wNo" secondAttribute="leading" constant="20" id="OUQ-7f-O5z"/> + <constraint firstAttribute="trailing" secondItem="9ze-gS-MRW" secondAttribute="trailing" constant="15" id="PCf-CL-3BS"/> + <constraint firstItem="Wu8-Ho-MOI" firstAttribute="top" secondItem="YEa-1b-wNo" secondAttribute="top" constant="15" id="ZIH-ff-uTu"/> + <constraint firstAttribute="width" constant="250" id="hoZ-xi-2uY"/> + <constraint firstAttribute="trailing" secondItem="xyX-lk-ARU" secondAttribute="trailing" constant="15" id="jeo-Vn-Rla"/> + <constraint firstAttribute="bottom" secondItem="7hN-OZ-vA4" secondAttribute="bottom" constant="10" id="llc-Cu-4aR"/> + <constraint firstItem="3gN-Us-HWE" firstAttribute="leading" secondItem="7hN-OZ-vA4" secondAttribute="trailing" constant="10" id="oBj-F2-ETd"/> + <constraint firstItem="xyX-lk-ARU" firstAttribute="top" secondItem="YEa-1b-wNo" secondAttribute="top" constant="15" id="om5-lu-SHZ"/> + <constraint firstItem="xyX-lk-ARU" firstAttribute="leading" secondItem="Wu8-Ho-MOI" secondAttribute="trailing" constant="10" id="rqV-mu-D32"/> + </constraints> + </view> + </subviews> + <constraints> + <constraint firstAttribute="bottom" secondItem="YEa-1b-wNo" secondAttribute="bottom" id="8YU-Mx-it1"/> + <constraint firstItem="YEa-1b-wNo" firstAttribute="leading" secondItem="ocf-Pp-J4F" secondAttribute="trailing" constant="10" id="Axo-wx-fOW"/> + <constraint firstItem="dDX-sZ-ylI" firstAttribute="leading" secondItem="AlH-xb-GaC" secondAttribute="leading" id="DsO-Oi-zzq"/> + <constraint firstAttribute="trailing" secondItem="dDX-sZ-ylI" secondAttribute="trailing" id="LR4-cr-pjq"/> + <constraint firstItem="ocf-Pp-J4F" firstAttribute="leading" secondItem="AlH-xb-GaC" secondAttribute="leading" id="NEW-8b-g1U"/> + <constraint firstItem="dDX-sZ-ylI" firstAttribute="top" secondItem="AlH-xb-GaC" secondAttribute="top" id="lau-iO-cB4"/> + <constraint firstItem="YEa-1b-wNo" firstAttribute="top" secondItem="dDX-sZ-ylI" secondAttribute="bottom" id="nnO-75-3KJ"/> + <constraint firstItem="ocf-Pp-J4F" firstAttribute="bottom" secondItem="YEa-1b-wNo" secondAttribute="bottom" id="xTt-0W-itN"/> + </constraints> + <connections> + <outlet property="declineButton" destination="3gN-Us-HWE" id="WYo-gh-5fw"/> + <outlet property="photoView" destination="ocf-Pp-J4F" id="e04-18-iXb"/> + <outlet property="progressIndicator" destination="7hN-OZ-vA4" id="Wda-hA-Ne0"/> + <outlet property="timeBox" destination="dDX-sZ-ylI" id="rAa-Jo-eXW"/> + <outlet property="timeLabel" destination="sRg-94-yH1" id="t2H-R6-f9H"/> + <outlet property="transferedFileName" destination="xyX-lk-ARU" id="ERM-pa-PQX"/> + </connections> + <point key="canvasLocation" x="139" y="490"/> + </tableCellView> + <tableCellView identifier="RightOngoingFileView" id="HAZ-Y8-9zY" userLabel="IMTableCellView" customClass="IMTableCellView"> + <rect key="frame" x="0.0" y="0.0" width="400" height="172"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> + <subviews> + <box boxType="custom" borderType="none" cornerRadius="4" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="x2B-gu-YBe"> + <rect key="frame" x="0.0" y="138" width="400" height="34"/> + <view key="contentView" id="zwm-oF-RvK"> + <rect key="frame" x="0.0" y="0.0" width="400" height="34"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> + <subviews> + <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="16V-ln-ss9"> + <rect key="frame" x="2" y="17" width="168" height="1"/> + <constraints> + <constraint firstAttribute="height" constant="0.5" id="YYX-lP-ZNJ"/> + </constraints> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" drawsBackground="YES" id="JXW-G1-35n"> + <font key="font" metaFont="system"/> + <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="gridColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="2IY-Tt-uAF"> + <rect key="frame" x="188" y="9" width="24" height="17"/> + <constraints> + <constraint firstAttribute="width" priority="250" constant="20" id="nTF-Xv-8ok"/> + </constraints> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="center" id="fU3-Ej-fOu"> + <font key="font" metaFont="system"/> + <color key="textColor" name="secondaryLabelColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="MJO-J2-HCJ"> + <rect key="frame" x="230" y="17" width="168" height="1"/> + <constraints> + <constraint firstAttribute="height" constant="0.5" id="RN3-qS-RPr"/> + </constraints> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" drawsBackground="YES" id="F80-Wf-vKb"> + <font key="font" metaFont="system"/> + <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="gridColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + </subviews> + <constraints> + <constraint firstItem="16V-ln-ss9" firstAttribute="leading" secondItem="zwm-oF-RvK" secondAttribute="leading" constant="2" id="G6r-JS-qJ4"/> + <constraint firstItem="MJO-J2-HCJ" firstAttribute="leading" secondItem="2IY-Tt-uAF" secondAttribute="trailing" constant="20" id="RG4-d1-WK6"/> + <constraint firstItem="2IY-Tt-uAF" firstAttribute="centerX" secondItem="zwm-oF-RvK" secondAttribute="centerX" id="Tt5-98-7WH"/> + <constraint firstItem="2IY-Tt-uAF" firstAttribute="leading" secondItem="16V-ln-ss9" secondAttribute="trailing" constant="20" id="VrH-ro-ZGY"/> + <constraint firstItem="16V-ln-ss9" firstAttribute="centerY" secondItem="zwm-oF-RvK" secondAttribute="centerY" id="XLA-pj-suG"/> + <constraint firstItem="MJO-J2-HCJ" firstAttribute="centerY" secondItem="zwm-oF-RvK" secondAttribute="centerY" id="gqF-e3-Iib"/> + <constraint firstItem="2IY-Tt-uAF" firstAttribute="centerY" secondItem="zwm-oF-RvK" secondAttribute="centerY" id="tNc-uW-aBn"/> + <constraint firstAttribute="trailing" secondItem="MJO-J2-HCJ" secondAttribute="trailing" constant="2" id="wSy-qz-jmi"/> + </constraints> + </view> + <constraints> + <constraint firstAttribute="height" constant="34" id="hvM-hF-reZ"/> + </constraints> + </box> + <view translatesAutoresizingMaskIntoConstraints="NO" id="UY2-T5-a0P" customClass="MessageBubbleView"> + <rect key="frame" x="150" y="0.0" width="250" height="138"/> + <subviews> + <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="sUr-U8-vgf"> + <rect key="frame" x="15" y="103" width="30" height="20"/> + <constraints> + <constraint firstAttribute="width" constant="30" id="1q5-4s-iFz"/> + <constraint firstAttribute="height" constant="20" id="ekF-eV-r0g"/> + </constraints> + <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="ic_attachment" id="1qg-9v-1DA"/> + </imageView> + <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="sT2-Dd-Vmy"> + <rect key="frame" x="53" y="106" width="184" height="17"/> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" id="8wM-Cw-p0J"> + <font key="font" metaFont="systemSemibold" size="13"/> + <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="2cr-cl-DfB"> + <rect key="frame" x="135" y="9" width="100" height="19"/> + <constraints> + <constraint firstAttribute="width" constant="100" id="xXu-dH-JTk"/> + </constraints> + <buttonCell key="cell" type="roundRect" title="Cancel" bezelStyle="roundedRect" image="ic_action_cancel" imagePosition="left" alignment="center" borderStyle="border" imageScaling="proportionallyUpOrDown" inset="2" id="9Oq-TB-quZ"> + <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> + <font key="font" metaFont="cellTitle"/> + </buttonCell> + </button> + <progressIndicator wantsLayer="YES" maxValue="100" indeterminate="YES" style="bar" translatesAutoresizingMaskIntoConstraints="NO" id="Sv9-jf-3cY"> + <rect key="frame" x="25" y="9" width="100" height="20"/> + <constraints> + <constraint firstAttribute="width" constant="100" id="btI-wg-j3H"/> + </constraints> + </progressIndicator> + <box verticalHuggingPriority="750" boxType="separator" translatesAutoresizingMaskIntoConstraints="NO" id="Bdf-V5-WwA"> + <rect key="frame" x="15" y="85" width="220" height="5"/> + </box> + </subviews> + <constraints> + <constraint firstAttribute="bottom" secondItem="2cr-cl-DfB" secondAttribute="bottom" constant="10" id="Bju-pD-Tkn"/> + <constraint firstAttribute="trailing" secondItem="2cr-cl-DfB" secondAttribute="trailing" constant="15" id="DEz-fI-qdO"/> + <constraint firstItem="sT2-Dd-Vmy" firstAttribute="leading" secondItem="sUr-U8-vgf" secondAttribute="trailing" constant="10" id="GLr-yY-aAN"/> + <constraint firstItem="sT2-Dd-Vmy" firstAttribute="top" secondItem="UY2-T5-a0P" secondAttribute="top" constant="15" id="Gzg-Ob-80f"/> + <constraint firstItem="2cr-cl-DfB" firstAttribute="leading" secondItem="Sv9-jf-3cY" secondAttribute="trailing" constant="10" id="MvI-nv-3Jm"/> + <constraint firstItem="sUr-U8-vgf" firstAttribute="top" secondItem="UY2-T5-a0P" secondAttribute="top" constant="15" id="O3v-7H-dYx"/> + <constraint firstItem="Bdf-V5-WwA" firstAttribute="top" secondItem="sUr-U8-vgf" secondAttribute="bottom" constant="15" id="U3B-ds-ZWG"/> + <constraint firstItem="Bdf-V5-WwA" firstAttribute="leading" secondItem="UY2-T5-a0P" secondAttribute="leading" constant="15" id="XEZ-G2-QEr"/> + <constraint firstItem="sUr-U8-vgf" firstAttribute="leading" secondItem="UY2-T5-a0P" secondAttribute="leading" constant="15" id="aSn-hE-GLz"/> + <constraint firstAttribute="trailing" secondItem="sT2-Dd-Vmy" secondAttribute="trailing" constant="15" id="acK-nQ-9vu"/> + <constraint firstAttribute="trailing" secondItem="Bdf-V5-WwA" secondAttribute="trailing" constant="15" id="eBA-nw-2aS"/> + <constraint firstAttribute="bottom" secondItem="Sv9-jf-3cY" secondAttribute="bottom" constant="10" id="lc7-4X-2Mb"/> + <constraint firstAttribute="width" constant="250" id="pfZ-1w-Zad"/> + </constraints> + <userDefinedRuntimeAttributes> + <userDefinedRuntimeAttribute type="color" keyPath="bgColor"> + <color key="value" red="0.23137254901960785" green="0.75686274509803919" blue="0.82745098039215681" alpha="0.29999999999999999" colorSpace="calibratedRGB"/> + </userDefinedRuntimeAttribute> + </userDefinedRuntimeAttributes> + </view> + </subviews> + <constraints> + <constraint firstItem="UY2-T5-a0P" firstAttribute="top" secondItem="x2B-gu-YBe" secondAttribute="bottom" id="GBH-MV-asW"/> + <constraint firstAttribute="trailing" secondItem="x2B-gu-YBe" secondAttribute="trailing" id="W6V-xm-R8a"/> + <constraint firstItem="x2B-gu-YBe" firstAttribute="leading" secondItem="HAZ-Y8-9zY" secondAttribute="leading" id="eCy-fP-yIT"/> + <constraint firstAttribute="trailing" secondItem="UY2-T5-a0P" secondAttribute="trailing" id="jAS-n6-OCB"/> + <constraint firstItem="x2B-gu-YBe" firstAttribute="top" secondItem="HAZ-Y8-9zY" secondAttribute="top" id="kZi-NL-X0r"/> + <constraint firstAttribute="bottom" secondItem="UY2-T5-a0P" secondAttribute="bottom" id="wRV-dW-dkZ"/> + </constraints> + <connections> + <outlet property="declineButton" destination="2cr-cl-DfB" id="0Rk-eA-Fyg"/> + <outlet property="progressIndicator" destination="Sv9-jf-3cY" id="6Y2-mi-Ml4"/> + <outlet property="timeBox" destination="x2B-gu-YBe" id="xPh-3D-3a0"/> + <outlet property="timeLabel" destination="2IY-Tt-uAF" id="uee-Wx-1bT"/> + <outlet property="transferedFileName" destination="sT2-Dd-Vmy" id="Dxv-eC-8hb"/> + </connections> + <point key="canvasLocation" x="139" y="750"/> + </tableCellView> + <tableCellView identifier="RightFinishedFileView" id="rmZ-yh-rX1" userLabel="IMTableCellView" customClass="IMTableCellView"> + <rect key="frame" x="0.0" y="0.0" width="400" height="172"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> + <subviews> + <box boxType="custom" borderType="none" cornerRadius="4" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="e0e-TK-qch"> + <rect key="frame" x="0.0" y="138" width="400" height="34"/> + <view key="contentView" id="Jbl-ZD-fCi"> + <rect key="frame" x="0.0" y="0.0" width="400" height="34"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> + <subviews> + <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="vft-hx-jRL"> + <rect key="frame" x="2" y="17" width="168" height="1"/> + <constraints> + <constraint firstAttribute="height" constant="0.5" id="PWs-Ka-fpT"/> + </constraints> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" drawsBackground="YES" id="0rt-2a-vc8"> + <font key="font" metaFont="system"/> + <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="gridColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Od3-Cq-LmR"> + <rect key="frame" x="188" y="9" width="24" height="17"/> + <constraints> + <constraint firstAttribute="width" priority="250" constant="20" id="RoH-7v-RcD"/> + </constraints> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="center" id="gyp-Xg-CZc"> + <font key="font" metaFont="system"/> + <color key="textColor" name="secondaryLabelColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="ODz-rY-AYz"> + <rect key="frame" x="230" y="17" width="168" height="1"/> + <constraints> + <constraint firstAttribute="height" constant="0.5" id="6aw-Wd-s4z"/> + </constraints> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" drawsBackground="YES" id="C0p-Lu-2bg"> + <font key="font" metaFont="system"/> + <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="gridColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + </subviews> + <constraints> + <constraint firstItem="Od3-Cq-LmR" firstAttribute="leading" secondItem="vft-hx-jRL" secondAttribute="trailing" constant="20" id="FmW-kw-khk"/> + <constraint firstItem="Od3-Cq-LmR" firstAttribute="centerX" secondItem="Jbl-ZD-fCi" secondAttribute="centerX" id="YbB-7M-3ST"/> + <constraint firstItem="vft-hx-jRL" firstAttribute="centerY" secondItem="Jbl-ZD-fCi" secondAttribute="centerY" id="aHg-Xy-yYu"/> + <constraint firstItem="Od3-Cq-LmR" firstAttribute="centerY" secondItem="Jbl-ZD-fCi" secondAttribute="centerY" id="kla-ao-cdw"/> + <constraint firstItem="vft-hx-jRL" firstAttribute="leading" secondItem="Jbl-ZD-fCi" secondAttribute="leading" constant="2" id="m2A-fV-jOH"/> + <constraint firstItem="ODz-rY-AYz" firstAttribute="leading" secondItem="Od3-Cq-LmR" secondAttribute="trailing" constant="20" id="ts6-Dr-zgK"/> + <constraint firstAttribute="trailing" secondItem="ODz-rY-AYz" secondAttribute="trailing" constant="2" id="wk4-po-Mf8"/> + <constraint firstItem="ODz-rY-AYz" firstAttribute="centerY" secondItem="Jbl-ZD-fCi" secondAttribute="centerY" id="yPI-DP-KSF"/> + </constraints> + </view> + <constraints> + <constraint firstAttribute="height" constant="34" id="bsP-7k-E34"/> + </constraints> + </box> + <view translatesAutoresizingMaskIntoConstraints="NO" id="uQv-aG-QZp" customClass="MessageBubbleView"> + <rect key="frame" x="150" y="0.0" width="250" height="138"/> + <subviews> + <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="gyB-QF-uEW"> + <rect key="frame" x="15" y="103" width="30" height="20"/> + <constraints> + <constraint firstAttribute="width" constant="30" id="20F-SE-qna"/> + <constraint firstAttribute="height" constant="20" id="4aT-Xp-Gdi"/> + </constraints> + <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="ic_attachment" id="yAd-of-sXU"/> + </imageView> + <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="wLw-Lb-baF"> + <rect key="frame" x="53" y="106" width="184" height="17"/> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" id="eJS-En-3Ww"> + <font key="font" metaFont="systemSemibold" size="13"/> + <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="eHR-Hi-Zl2"> + <rect key="frame" x="18" y="10" width="4" height="17"/> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="left" id="vDa-rM-ULY"> + <font key="font" metaFont="system"/> + <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + <box verticalHuggingPriority="750" boxType="separator" translatesAutoresizingMaskIntoConstraints="NO" id="gLx-wW-frG"> + <rect key="frame" x="15" y="85" width="220" height="5"/> + </box> + </subviews> + <constraints> + <constraint firstItem="gLx-wW-frG" firstAttribute="top" secondItem="gyB-QF-uEW" secondAttribute="bottom" constant="15" id="28J-lE-pdd"/> + <constraint firstAttribute="bottom" secondItem="eHR-Hi-Zl2" secondAttribute="bottom" constant="10" id="5ZN-OL-0ZV"/> + <constraint firstAttribute="trailing" secondItem="gLx-wW-frG" secondAttribute="trailing" constant="15" id="67z-cD-VBa"/> + <constraint firstItem="eHR-Hi-Zl2" firstAttribute="leading" secondItem="uQv-aG-QZp" secondAttribute="leading" constant="20" id="BvU-qk-8Ef"/> + <constraint firstItem="gyB-QF-uEW" firstAttribute="leading" secondItem="uQv-aG-QZp" secondAttribute="leading" constant="15" id="GS5-Nk-tfb"/> + <constraint firstItem="gyB-QF-uEW" firstAttribute="top" secondItem="uQv-aG-QZp" secondAttribute="top" constant="15" id="KbZ-GL-nmh"/> + <constraint firstAttribute="width" constant="250" id="QxX-Qe-0b8"/> + <constraint firstItem="wLw-Lb-baF" firstAttribute="leading" secondItem="gyB-QF-uEW" secondAttribute="trailing" constant="10" id="aAF-Aw-Y2H"/> + <constraint firstItem="gLx-wW-frG" firstAttribute="leading" secondItem="uQv-aG-QZp" secondAttribute="leading" constant="15" id="h1s-DP-439"/> + <constraint firstItem="wLw-Lb-baF" firstAttribute="top" secondItem="uQv-aG-QZp" secondAttribute="top" constant="15" id="vP0-fT-gob"/> + <constraint firstAttribute="trailing" secondItem="wLw-Lb-baF" secondAttribute="trailing" constant="15" id="yqT-e3-1Rn"/> + </constraints> + </view> + <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="bXz-Qu-7HX"> + <rect key="frame" x="400" y="0.0" width="0.0" height="138"/> + <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" id="5Js-l5-7dJ"/> + </imageView> + </subviews> + <constraints> + <constraint firstItem="e0e-TK-qch" firstAttribute="top" secondItem="rmZ-yh-rX1" secondAttribute="top" id="8NZ-EV-k0V"/> + <constraint firstAttribute="bottom" secondItem="bXz-Qu-7HX" secondAttribute="bottom" id="Ca3-5W-DMG"/> + <constraint firstItem="e0e-TK-qch" firstAttribute="leading" secondItem="rmZ-yh-rX1" secondAttribute="leading" id="JHH-tM-TTv"/> + <constraint firstAttribute="bottom" secondItem="uQv-aG-QZp" secondAttribute="bottom" id="iyK-vD-6gs"/> + <constraint firstAttribute="trailing" secondItem="uQv-aG-QZp" secondAttribute="trailing" id="nBz-tG-1V1"/> + <constraint firstAttribute="trailing" secondItem="bXz-Qu-7HX" secondAttribute="trailing" id="paZ-cl-fq4"/> + <constraint firstItem="uQv-aG-QZp" firstAttribute="top" secondItem="e0e-TK-qch" secondAttribute="bottom" id="rvb-My-XBo"/> + <constraint firstAttribute="trailing" secondItem="e0e-TK-qch" secondAttribute="trailing" id="w3i-dk-KKy"/> + <constraint firstItem="bXz-Qu-7HX" firstAttribute="top" secondItem="e0e-TK-qch" secondAttribute="bottom" id="zXr-X6-l7P"/> + </constraints> + <connections> + <outlet property="msgBackground" destination="uQv-aG-QZp" id="poE-7z-JEI"/> + <outlet property="statusLabel" destination="eHR-Hi-Zl2" id="TvR-nl-6eO"/> + <outlet property="timeBox" destination="e0e-TK-qch" id="JPW-TW-Byd"/> + <outlet property="timeLabel" destination="Od3-Cq-LmR" id="lja-3j-VsT"/> + <outlet property="transferedFileName" destination="wLw-Lb-baF" id="66e-Vm-3Pt"/> + <outlet property="transferedImage" destination="bXz-Qu-7HX" id="Flw-il-Ypa"/> + </connections> + <point key="canvasLocation" x="147" y="1290"/> + </tableCellView> + </objects> + <resources> + <image name="ic_action_cancel" width="72" height="72"/> + <image name="ic_attachment" width="72" height="72"/> + <image name="ic_file_upload" width="72" height="72"/> + </resources> +</document>