Commit ecdc4faa authored by Andreas Traczyk's avatar Andreas Traczyk Committed by Kateryna Kostiuk

UI: parametrize animating in/out VCs and disable

- corrects UI bugs produced by animating VC presentation
  without a properly coordinated view stack

Change-Id: I8b397f0ecc9ebcb6957b23d39c45a71b7e66162e
Reviewed-by: Kateryna Kostiuk's avatarKateryna Kostiuk <kateryna.kostiuk@savoirfairelinux.com>
parent e521a184
......@@ -26,8 +26,8 @@
@interface ConversationVC : NSViewController
-(void) initFrame;
-(void) animateIn;
-(void) animateOut;
-(void) showWithAnimation:(BOOL)animate;
-(void) hideWithAnimation:(BOOL)animate;
/**
* Message contained in messageField TextField.
......
......@@ -235,13 +235,18 @@
- (IBAction)backPressed:(id)sender {
[delegate rightPanelClosed];
[self animateOut];
[self hideWithAnimation:false];
}
# pragma mark private IN/OUT animations
-(void) animateIn
-(void) showWithAnimation:(BOOL)animate
{
if (!animate) {
[self.view setHidden:NO];
return;
}
CGRect frame = CGRectOffset(self.view.superview.bounds, -self.view.superview.bounds.size.width, 0);
[self.view setHidden:NO];
......@@ -256,12 +261,17 @@
[CATransaction commit];
}
-(void) animateOut
-(void) hideWithAnimation:(BOOL)animate
{
if(self.view.frame.origin.x < 0) {
return;
}
if (!animate) {
[self.view setHidden:YES];
return;
}
CGRect frame = CGRectOffset(self.view.frame, -self.view.frame.size.width, 0);
[CATransaction begin];
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position"];
......
......@@ -33,8 +33,8 @@ class Call;
}
-(void) initFrame;
-(void) animateIn;
-(void) animateOut;
-(void) showWithAnimation:(BOOL)animate;
-(void) hideWithAnimation:(BOOL)animate;
-(void) setCurrentCall:(const std::string&)callUid
conversation:(const std::string&)convUid
account:(const lrc::api::account::Info*)account;
......
......@@ -271,7 +271,7 @@
case Status::INVALID:
[controlsPanel setHidden:YES];
[outgoingPanel setHidden:NO];
[self animateOut];
[self hideWithAnimation:false];
break;
}
......@@ -504,55 +504,6 @@
[self.chatVC takeFocus];
}
-(void) animateIn
{
CGRect frame = CGRectOffset(self.view.superview.bounds, -self.view.superview.bounds.size.width, 0);
[self.view setHidden:NO];
[CATransaction begin];
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position"];
[animation setFromValue:[NSValue valueWithPoint:frame.origin]];
[animation setToValue:[NSValue valueWithPoint:self.view.superview.bounds.origin]];
[animation setDuration:0.2f];
[animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]];
[CATransaction setCompletionBlock:^{
if (accountInfo_ == nil)
return;
auto* callModel = accountInfo_->callModel.get();
auto* convModel = accountInfo_->conversationModel.get();
// when call comes in we want to show the controls/header
[self mouseIsMoving:YES];
[self connectVideoSignals];
/* check if text media is already present */
if(not callModel->hasCall(callUid_))
return;
[loadingIndicator setAnimates:YES];
[self updateCall:YES];
/* monitor media for messaging text messaging */
QObject::disconnect(self.messageConnection);
self.messageConnection = QObject::connect(convModel,
&lrc::api::ConversationModel::interactionStatusUpdated,
[self] (std::string convUid,
uint64_t msgId,
lrc::api::interaction::Info msg) {
if (msg.type == lrc::api::interaction::Type::TEXT) {
if(not [[self splitView] isSubviewCollapsed:[[[self splitView] subviews] objectAtIndex: 1]]){
return;
}
[self uncollapseRightView];
}
});
}];
[self.view.layer addAnimation:animation forKey:animation.keyPath];
[CATransaction commit];
}
-(void) cleanUp
{
if(self.splitView.isInFullScreenMode)
......@@ -586,12 +537,77 @@
[advancedPanel setHidden:YES];
}
-(void) animateOut
-(void) setupCallView
{
if (accountInfo_ == nil)
return;
auto* callModel = accountInfo_->callModel.get();
auto* convModel = accountInfo_->conversationModel.get();
// when call comes in we want to show the controls/header
[self mouseIsMoving:YES];
[self connectVideoSignals];
/* check if text media is already present */
if(not callModel->hasCall(callUid_))
return;
[loadingIndicator setAnimates:YES];
[self updateCall:YES];
/* monitor media for messaging text messaging */
QObject::disconnect(self.messageConnection);
self.messageConnection = QObject::connect(convModel,
&lrc::api::ConversationModel::interactionStatusUpdated,
[self] (std::string convUid,
uint64_t msgId,
lrc::api::interaction::Info msg) {
if (msg.type == lrc::api::interaction::Type::TEXT) {
if(not [[self splitView] isSubviewCollapsed:[[[self splitView] subviews] objectAtIndex: 1]]){
return;
}
[self uncollapseRightView];
}
});
}
-(void) showWithAnimation:(BOOL)animate
{
if (!animate) {
[self.view setHidden:NO];
[self setupCallView];
return;
}
CGRect frame = CGRectOffset(self.view.superview.bounds, -self.view.superview.bounds.size.width, 0);
[self.view setHidden:NO];
[CATransaction begin];
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position"];
[animation setFromValue:[NSValue valueWithPoint:frame.origin]];
[animation setToValue:[NSValue valueWithPoint:self.view.superview.bounds.origin]];
[animation setDuration:0.2f];
[animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]];
[CATransaction setCompletionBlock:^{
[self setupCallView];
}];
[self.view.layer addAnimation:animation forKey:animation.keyPath];
[CATransaction commit];
}
-(void) hideWithAnimation:(BOOL)animate
{
if(self.view.frame.origin.x < 0) {
return;
}
if (!animate) {
[self.view setHidden:YES];
return;
}
CGRect frame = CGRectOffset(self.view.frame, -self.view.frame.size.width, 0);
[CATransaction begin];
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position"];
......
......@@ -75,7 +75,8 @@
IBOutlet SmartViewVC* smartViewVC;
CurrentCallVC* currentCallVC;
ConversationVC* offlineVC;
ConversationVC* conversationVC;
// toolbar menu items
ChooseAccountVC* chooseAccountVC;
}
......@@ -93,18 +94,18 @@ NSString* const kChangeAccountToolBarItemIdentifier = @"ChangeAccountToolBarIte
lrc_ = std::make_unique<lrc::api::Lrc>();
currentCallVC = [[CurrentCallVC alloc] initWithNibName:@"CurrentCall" bundle:nil];
offlineVC = [[ConversationVC alloc] initWithNibName:@"Conversation" bundle:nil delegate:self];
conversationVC = [[ConversationVC alloc] initWithNibName:@"Conversation" bundle:nil delegate:self];
// toolbar items
chooseAccountVC = [[ChooseAccountVC alloc] initWithNibName:@"ChooseAccount" bundle:nil model:&(lrc_->getAccountModel()) delegate:self];
[callView setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];
[[currentCallVC view] setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];
[[offlineVC view] setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];
[[conversationVC view] setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];
[callView addSubview:[currentCallVC view] positioned:NSWindowAbove relativeTo:nil];
[callView addSubview:[offlineVC view] positioned:NSWindowAbove relativeTo:nil];
[callView addSubview:[conversationVC view] positioned:NSWindowAbove relativeTo:nil];
[currentCallVC initFrame];
[offlineVC initFrame];
[conversationVC initFrame];
@try {
[smartViewVC setConversationModel: [chooseAccountVC selectedAccount].conversationModel.get()];
}
......@@ -139,8 +140,8 @@ NSString* const kChangeAccountToolBarItemIdentifier = @"ChangeAccountToolBarIte
conversation:convInfo.uid
account:accInfo];
[smartViewVC selectConversation: convInfo model:accInfo->conversationModel.get()];
[currentCallVC animateIn];
[offlineVC animateOut];
[currentCallVC showWithAnimation:false];
[conversationVC hideWithAnimation:false];
});
QObject::connect(&lrc_->getBehaviorController(),
......@@ -157,8 +158,8 @@ NSString* const kChangeAccountToolBarItemIdentifier = @"ChangeAccountToolBarIte
conversation:convInfo.uid
account:accInfo];
[smartViewVC selectConversation: convInfo model:accInfo->conversationModel.get()];
[currentCallVC animateIn];
[offlineVC animateOut];
[currentCallVC showWithAnimation:false];
[conversationVC hideWithAnimation:false];
});
QObject::connect(&lrc_->getBehaviorController(),
......@@ -166,10 +167,10 @@ NSString* const kChangeAccountToolBarItemIdentifier = @"ChangeAccountToolBarIte
[self](const std::string& accountId,
const lrc::api::conversation::Info& convInfo){
auto& accInfo = lrc_->getAccountModel().getAccountInfo(accountId);
[offlineVC setConversationUid:convInfo.uid model:accInfo.conversationModel.get()];
[conversationVC setConversationUid:convInfo.uid model:accInfo.conversationModel.get()];
[smartViewVC selectConversation: convInfo model:accInfo.conversationModel.get()];
[offlineVC animateIn];
[currentCallVC animateOut];
[conversationVC showWithAnimation:false];
[currentCallVC hideWithAnimation:false];
});
}
......@@ -371,8 +372,8 @@ NSString* const kChangeAccountToolBarItemIdentifier = @"ChangeAccountToolBarIte
{
// If the selected account has been changed, we close any open panel
if ([smartViewVC setConversationModel:accInfo.conversationModel.get()]) {
[currentCallVC animateOut];
[offlineVC animateOut];
[currentCallVC hideWithAnimation:false];
[conversationVC hideWithAnimation:false];
}
// Welcome view informations are also updated
......@@ -390,8 +391,8 @@ NSString* const kChangeAccountToolBarItemIdentifier = @"ChangeAccountToolBarIte
}
-(void) listTypeChanged {
[offlineVC animateOut];
[currentCallVC animateOut];
[conversationVC hideWithAnimation:false];
[currentCallVC hideWithAnimation:false];
}
#pragma mark - NSToolbarDelegate
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment