private void joinedChannelsChanged(object sender, NotifyCollectionChangedEventArgs args) { switch (args.Action) { case NotifyCollectionChangedAction.Add: IEnumerable <Channel> newChannels = args.NewItems.OfType <Channel>().Where(isChatChannel); foreach (var channel in newChannels) { channelList.AddChannel(channel); } break; case NotifyCollectionChangedAction.Remove: IEnumerable <Channel> leftChannels = args.OldItems.OfType <Channel>().Where(isChatChannel); foreach (var channel in leftChannels) { channelList.RemoveChannel(channel); if (loadedChannels.ContainsKey(channel)) { DrawableChannel loaded = loadedChannels[channel]; loadedChannels.Remove(channel); // DrawableChannel removed from cache must be manually disposed loaded.Dispose(); } } break; } }
private void currentChannelChanged(ValueChangedEvent <Channel> e) { if (e.NewValue == null) { textbox.Current.Disabled = true; currentChannelContainer.Clear(false); ChannelSelectionOverlay.Show(); return; } if (e.NewValue is ChannelSelectorTabItem.ChannelSelectorTabChannel) { return; } textbox.Current.Disabled = e.NewValue.ReadOnly; if (ChannelTabControl.Current.Value != e.NewValue) { Scheduler.Add(() => ChannelTabControl.Current.Value = e.NewValue); } var loaded = loadedChannels.Find(d => d.Channel == e.NewValue); if (loaded == null) { currentChannelContainer.FadeOut(500, Easing.OutQuint); loading.Show(); loaded = new DrawableChannel(e.NewValue); loadedChannels.Add(loaded); LoadComponentAsync(loaded, l => { if (currentChannel.Value != e.NewValue) { return; } loading.Hide(); currentChannelContainer.Clear(false); currentChannelContainer.Add(loaded); currentChannelContainer.FadeIn(500, Easing.OutQuint); }); } else { currentChannelContainer.Clear(false); currentChannelContainer.Add(loaded); } // mark channel as read when channel switched if (e.NewValue.Messages.Any()) { channelManager.MarkChannelAsRead(e.NewValue); } }
private void channelChanged(ValueChangedEvent <Channel> e) { drawableChannel?.Expire(); if (e.NewValue == null) { return; } AddInternal(drawableChannel = new StandAloneDrawableChannel(e.NewValue) { CreateChatLineAction = CreateMessage, Padding = new MarginPadding { Bottom = postingTextbox ? textbox_height : 0 } }); }
private void currentChannelChanged(ValueChangedEvent <Channel> e) { if (e.NewValue == null) { textbox.Current.Disabled = true; currentChannelContainer.Clear(false); channelSelectionOverlay.State = Visibility.Visible; return; } if (e.NewValue is ChannelSelectorTabItem.ChannelSelectorTabChannel) { return; } textbox.Current.Disabled = e.NewValue.ReadOnly; if (channelTabControl.Current.Value != e.NewValue) { Scheduler.Add(() => channelTabControl.Current.Value = e.NewValue); } var loaded = loadedChannels.Find(d => d.Channel == e.NewValue); if (loaded == null) { currentChannelContainer.FadeOut(500, Easing.OutQuint); loading.Show(); loaded = new DrawableChannel(e.NewValue); loadedChannels.Add(loaded); LoadComponentAsync(loaded, l => { loading.Hide(); currentChannelContainer.Clear(false); currentChannelContainer.Add(loaded); currentChannelContainer.FadeIn(500, Easing.OutQuint); }); } else { currentChannelContainer.Clear(false); currentChannelContainer.Add(loaded); } }
private void currentChannelChanged(Channel channel) { if (channel == null) { textbox.Current.Disabled = true; currentChannelContainer.Clear(false); channelTabControl.Current.Value = null; return; } textbox.Current.Disabled = channel.ReadOnly; if (channelTabControl.Current.Value != channel) { Scheduler.Add(() => channelTabControl.Current.Value = channel); } var loaded = loadedChannels.Find(d => d.Channel == channel); if (loaded == null) { currentChannelContainer.FadeOut(500, Easing.OutQuint); loading.Show(); loaded = new DrawableChannel(channel); loadedChannels.Add(loaded); LoadComponentAsync(loaded, l => { loading.Hide(); currentChannelContainer.Clear(false); currentChannelContainer.Add(loaded); currentChannelContainer.FadeIn(500, Easing.OutQuint); }); } else { currentChannelContainer.Clear(false); Scheduler.Add(() => currentChannelContainer.Add(loaded)); } }
private void currentChannelChanged(ValueChangedEvent <Channel> e) { if (e.NewValue == null) { textBox.Current.Disabled = true; currentChannelContainer.Clear(false); ChannelSelectionOverlay.Show(); return; } if (e.NewValue is ChannelSelectorTabItem.ChannelSelectorTabChannel) { return; } textBox.Current.Disabled = e.NewValue.ReadOnly; if (ChannelTabControl.Current.Value != e.NewValue) { Scheduler.Add(() => ChannelTabControl.Current.Value = e.NewValue); } var loaded = loadedChannels.Find(d => d.Channel == e.NewValue); if (loaded == null) { currentChannelContainer.FadeOut(500, Easing.OutQuint); loading.Show(); loaded = new DrawableChannel(e.NewValue); loadedChannels.Add(loaded); LoadComponentAsync(loaded, l => { if (currentChannel.Value != e.NewValue) { return; } // check once more to ensure the channel hasn't since been removed from the loaded channels list (may have been left by some automated means). if (!loadedChannels.Contains(loaded)) { return; } loading.Hide(); currentChannelContainer.Clear(false); currentChannelContainer.Add(loaded); currentChannelContainer.FadeIn(500, Easing.OutQuint); }); } else { currentChannelContainer.Clear(false); currentChannelContainer.Add(loaded); } // mark channel as read when channel switched if (e.NewValue.Messages.Any()) { channelManager.MarkChannelAsRead(e.NewValue); } }
private void addChannel(Channel channel) { Add(channelDisplay = new DrawableChannel(channel)); careChannels.Add(channel); }
private void currentChannelChanged(ValueChangedEvent <Channel> channel) { Channel?newChannel = channel.NewValue; // null channel denotes that we should be showing the listing. if (newChannel == null) { currentChannel.Value = channelList.ChannelListingChannel; return; } if (newChannel is ChannelListing.ChannelListingChannel) { currentChannelContainer.Clear(false); channelListing.Show(); textBar.ShowSearch.Value = true; } else { channelListing.Hide(); textBar.ShowSearch.Value = false; if (loadedChannels.ContainsKey(newChannel)) { currentChannelContainer.Clear(false); currentChannelContainer.Add(loadedChannels[newChannel]); } else { loading.Show(); // Ensure the drawable channel is stored before async load to prevent double loading DrawableChannel drawableChannel = CreateDrawableChannel(newChannel); loadedChannels.Add(newChannel, drawableChannel); LoadComponentAsync(drawableChannel, loadedDrawable => { // Ensure the current channel hasn't changed by the time the load completes if (currentChannel.Value != loadedDrawable.Channel) { return; } // Ensure the cached reference hasn't been removed from leaving the channel if (!loadedChannels.ContainsKey(loadedDrawable.Channel)) { return; } currentChannelContainer.Clear(false); currentChannelContainer.Add(loadedDrawable); loading.Hide(); }); } } // Mark channel as read when channel switched if (newChannel.Messages.Any()) { channelManager.MarkChannelAsRead(newChannel); } }