UI/UX: refactor messages view

Change-Id: I2292ddf0d958aadc8171a86f12450ec56af0f6fc
Reviewed-by: Andreas Traczyk <andreas.traczyk@savoirfairelinux.com>
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