UI/UX: refactor messages view
Change-Id: I2292ddf0d958aadc8171a86f12450ec56af0f6fc
Reviewed-by: Andreas Traczyk <andreas.traczyk@savoirfairelinux.com>
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 7c5fc9f..902723e 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -265,6 +265,7 @@
ContactRequest
AccBannedContacts
PasswordChange
+ MessageCells
)
# Icons
@@ -274,6 +275,7 @@
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 0000000..bf0a53b
--- /dev/null
+++ b/data/dark/ic_attachment.png
Binary files differ
diff --git a/src/ChatVC.mm b/src/ChatVC.mm
index 5a3a9ed..895e02c 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 e5bfcc6..4061e66 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 8ce35c5..f88b1e9 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 4892137..7e72aca 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 @@
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 @@
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 @@
[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 @@
- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
{
+
auto* conv = [self getCurrentConversation];
if (conv == nil)
@@ -222,9 +366,7 @@
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 @@
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;
+ MessageSequencing sequence = [self computeSequencingFor:row];
+ BubbleType type = SINGLE;
+ if (sequence == FIRST_WITHOUT_TIME || sequence == FIRST_WITH_TIME) {
+ type = FIRST;
}
- [result.photoView setHidden:!isFirstInSequence];
- result.msgBackground.needPointer = isFirstInSequence;
+ 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]];
+ CGSize messageSize = [self sizeFor: @(interaction.body.c_str()) maxWidth:tableView.frame.size.width * 0.7];
- CGFloat finalWidth = MAX(msgAttString.size.width, timestampAttrString.size.width);
-
- 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 @@
std::advance(it, row);
- auto& interaction = it->second;
+ auto interaction = it->second;
- if(interaction.type == lrc::api::interaction::Type::INCOMING_DATA_TRANSFER || interaction.type == lrc::api::interaction::Type::OUTGOING_DATA_TRANSFER)
- return 52.0;
+ MessageSequencing sequence = [self computeSequencingFor:row];
+
+ 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;
}
+ 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);
+}
+
+#pragma mark - message view parameters
+
+-(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;
+}
+
+-(CGSize) sizeFor:(NSString *) message maxWidth:(CGFloat) width {
+ CGFloat horizaontalMargin = 6;
NSMutableAttributedString* msgAttString =
- [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"%@\n",@(interaction.body.c_str())]
+ [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"%@", message]
attributes:[self messageAttributes]];
- NSDate *msgTime = [NSDate dateWithTimeIntervalSince1970:interaction.timestamp];
- NSAttributedString* timestampAttrString =
- [[NSAttributedString alloc] initWithString:[NSDateFormatter localizedStringFromDate:msgTime dateStyle:NSDateFormatterMediumStyle timeStyle:NSDateFormatterMediumStyle]
- attributes:[self timestampAttributes]];
-
- [msgAttString appendAttributedString:timestampAttrString];
-
- [msgAttString appendAttributedString:timestampAttrString];
-
- 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;
+}
- double height = tv.frame.size.height + 10;
- return MAX(height, 50.0f);
+-(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;
+}
+
+-(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 @@
#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 @@
Line break mode NSLineBreakByWordWrapping
All others 0.0
*/
- NSMutableParagraphStyle* aMutableParagraphStyle =
- [[NSParagraphStyle defaultParagraphStyle] mutableCopy];
+ NSMutableParagraphStyle* aMutableParagraphStyle =
+ [[NSParagraphStyle defaultParagraphStyle] mutableCopy];
+ [aMutableParagraphStyle setHeadIndent:1.0];
+ [aMutableParagraphStyle setFirstLineHeadIndent:1.0];
+ return aMutableParagraphStyle;
+}
- // 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;
+- (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 @@
}
}
-- (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 e9b5cde..865bd6a 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 2d86cc9..365837d 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]];
- [self.msgView addConstraint:constraint];
+ 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];
+}
+
+- (void) invalidateImageConstraints {
+[NSLayoutConstraint deactivateConstraints:[self.transferedImage constraints]];
}
- (uint64_t)interaction
diff --git a/src/views/MessageBubbleView.h b/src/views/MessageBubbleView.h
index 7b87c85..339d085 100644
--- a/src/views/MessageBubbleView.h
+++ b/src/views/MessageBubbleView.h
@@ -24,11 +24,23 @@
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 feadb8a..78ce35a 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 49d5ad1..0e1d8d8 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 16c10ff..01b5a3e 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 32fd4e2..6cfcfe8 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>
- <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"/>
+ <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="40" id="Fyz-zn-84R"/>
- <constraint firstAttribute="width" constant="40" id="Ybg-RM-bK9"/>
+ <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="0.0" width="30" height="30"/>
+ <constraints>
+ <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>
+ </customView>
+ <customView ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="R85-0p-W1u">
+ <rect key="frame" x="323" y="0.0" width="40" height="30"/>
+ <subviews>
+ <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="height" constant="16" id="1bf-RT-KMB"/>
+ <constraint firstAttribute="width" constant="16" id="gx0-ZN-nlt"/>
+ </constraints>
+ </progressIndicator>
+ <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" 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="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"/>
+ <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="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"/>
+ <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="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="RightOngoingFileView" id="f7f-vE-9kV" userLabel="IMTableCellView" customClass="IMTableCellView">
+ <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>
- <customView ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="288-cW-DUh" customClass="MessageBubbleView">
- <rect key="frame" x="5" y="5" width="637" height="50"/>
- <subviews>
- <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="oA1-1W-48a" userLabel="Decline">
- <rect key="frame" x="36" y="6" width="44" height="43"/>
- <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"/>
- </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>
+ <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 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"/>
+ <constraint firstAttribute="height" constant="20" id="sNr-mm-ozG"/>
</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">
- <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 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"/>
- </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"/>
- </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"/>
- </connections>
- </tableCellView>
- <tableCellView identifier="LeftFinishedFileView" id="uhL-Ve-VU7" userLabel="IMTableCellView" customClass="IMTableCellView">
- <rect key="frame" x="1" y="373" 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"/>
- <constraints>
- <constraint firstAttribute="height" constant="40" id="LTJ-IZ-3Gu"/>
- <constraint firstAttribute="width" constant="40" id="PZo-zB-kO5"/>
- </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>
- <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"/>
- </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>
+ </box>
<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"/>
+ <rect key="frame" x="330" y="11" width="37" height="17"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="17" id="azh-RJ-oYw"/>
+ </constraints>
<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 5669556..6a22046 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"/>
+ <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="Ytt-Mn-nI7"/>
- <constraint firstAttribute="height" constant="30" id="gvg-Fs-Bez"/>
+ <constraint firstAttribute="height" constant="30" id="VFG-7p-7Hg"/>
</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"/>
- <constraints>
- <constraint firstAttribute="width" constant="30" id="eGt-tj-De4"/>
- <constraint firstAttribute="height" constant="30" id="gaj-Cf-JqG"/>
- </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>
- <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"/>
- </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>
+ </box>
<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"/>
+ <rect key="frame" x="166" y="11" width="37" height="17"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="17" id="blq-Kh-Y2Y"/>
+ </constraints>
<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 0000000..8eb516a
--- /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>