/// <summary> /// 把视频网格设置成行列格局 /// </summary> /// <param name="rows"></param> /// <param name="columns"></param> public void SetShowMode(int rows, int columns) { if (rows > 0 && columns > 0) { _Rows = rows; _Columns = columns; for (int i = _Videoes.Count; i < rows * columns; i++) { VideoPanel video = VideoPanelFactory.CreatePanel(); video.AllowDrop = true; video.Name = "actiVideoPanel" + i.ToString(); video.ShowTitle = true; video.StretchToFit = true; video.VideoSource = null; this.Controls.Add(video); video.Visible = true; _Videoes.Add(video); } //只显示行列数,其它的隐藏 for (int i = 0; i < _Videoes.Count; i++) { _Videoes[i].Visible = i < rows * columns ? true : false; } LayoutVideoes(); } }
//获取空闲的视频 private VideoPanel GetFreeVideoPanel(VideoSourceInfo video) { if (video != null) { VideoPanel panel = _Videoes.FirstOrDefault(vp => vp.VideoSource == null); if (panel != null) { if (video.VideoSourceType != panel.VideoType) { int index = _Videoes.FindIndex(vp => vp == panel); if (index >= 0) { RemoveVideoPanel(panel); //视频类型不同的,重新创建视频 VideoPanel p = CreateVideoPanel(video.VideoSourceType, panel.Name, panel.Visible); p.Left = panel.Left; p.Top = panel.Top; p.Width = panel.Width; p.Height = panel.Height; _Videoes[index] = p; return(p); } } } return(panel); } return(null); }
private void VideoDragDropHandling(object sender, VideoSourceInfo video) { VideoPanel panel = sender as VideoPanel; if (panel != null) { int index = _Videoes.FindIndex(vp => vp == panel); if (index >= 0) { RemoveVideoPanel(panel); //视频类型不同的,重新创建视频 VideoPanel p = CreateVideoPanel(video.VideoSourceType, panel.Name, panel.Visible); p.Left = panel.Left; p.Top = panel.Top; p.Width = panel.Width; p.Height = panel.Height; _Videoes[index] = p; int aIndex = _ActiveVideoes.FindIndex(vp => vp == panel); if (aIndex >= 0) { _ActiveVideoes[aIndex] = p; } p.VideoSource = video; p.Play(true); } } }
/// <summary> /// 把视频网格设置成行列格局 /// </summary> /// <param name="rows"></param> /// <param name="columns"></param> public void SetShowMode(int rows, int columns) { if (rows > 0 && columns > 0) { _Rows = rows; _Columns = columns; int videoType = (int)VideoServerType.ACTi; if (UserSetting.Current != null) { videoType = UserSetting.Current.VideoType; } for (int i = _Videoes.Count; i < rows * columns; i++) { VideoPanel video = CreateVideoPanel(videoType, "actiVideoPanel" + i.ToString(), true); //VideoPanel video = VideoPanelFactory.CreatePanel(); //video.AllowDrop = true; //video.Name = "actiVideoPanel" + i.ToString(); //video.ShowTitle = true; //video.StretchToFit = true; //video.VideoSource = null; //this.Controls.Add(video); //video.Visible = true; _Videoes.Add(video); } //只显示行列数,其它的隐藏 for (int i = 0; i < _Videoes.Count; i++) { _Videoes[i].Visible = i < rows * columns ? true : false; } LayoutVideoes(); } }
/// <summary> /// 创建视频窗口 /// </summary> /// <param name="videoType"></param> /// <param name="name"></param> /// <param name="visible"></param> /// <returns></returns> private VideoPanel CreateVideoPanel(int videoType, string name, bool visible) { VideoPanel video = VideoPanelFactory.CreatePanel(videoType); video.AllowDrop = true; video.Name = name; video.ShowTitle = true; video.StretchToFit = true; video.VideoSource = null; video.Visible = visible; video.VideoDragDropHandling -= VideoDragDropHandling; video.VideoDragDropHandling += VideoDragDropHandling; this.videoPanel.Controls.Add(video); return(video); }
/// <summary> /// 显示视频,如果视频已经在网格中,则不进行操作.如果已经打开的视频多于网格的行列数,则超出的视频不会显示出来 /// </summary> public void RenderVideoes(List <VideoSourceInfo> videoes) { if (videoes != null) { foreach (VideoSourceInfo vs in videoes) { if (!_Videoes.Exists(vp => vp.VideoSource == vs)) { VideoPanel p = _Videoes.FirstOrDefault(vp => vp.VideoSource == null); if (p != null) { p.VideoSource = vs; } } } } }
/// <summary> /// 显示视频,如果视频已经在网格中,则不进行操作.如果已经打开的视频多于网格的行列数,则超出的视频不会显示出来 /// </summary> public void RenderVideoes(List <VideoSourceInfo> videoes) { if (videoes != null) { foreach (VideoSourceInfo vs in videoes) { if (!_Videoes.Exists(vp => vp.VideoSource == vs)) { VideoPanel p = GetFreeVideoPanel(vs); if (p != null) { p.VideoSource = vs; } } } } }
/// <summary> /// 显示并播放视频,如果视频已经在网格中,则播放它.如果已经打开的视频大于网格可以显示的最大视频数量,则超出的视频不会显示出来 /// </summary> /// <param name="video"></param> public void RenderAndPlayVideo(VideoSourceInfo video) { VideoPanel p = _Videoes.SingleOrDefault(vp => vp.VideoSource == video); if (p != null) { p.Play(true); } else { p = _Videoes.FirstOrDefault(vp => vp.VideoSource == null); if (p != null) { p.VideoSource = video; p.Play(true); } } }
public UCVideoListView() { InitializeComponent(); VideoPanel video = VideoPanelFactory.CreatePanel(); video.AllowDrop = true; video.Name = "actiVideoPanel0"; video.ShowTitle = true; video.StretchToFit = true; video.VideoSource = null; video.Visible = true; video.Dock = DockStyle.Fill; this.btnLeft.Visible = false; this.btnRight.Visible = false; this.videoPanel.Controls.Add(video); _Videoes.Add(video); Clear(); }
/// <summary> /// 在视频列表中显示一系列图片 /// </summary> /// <param name="imgs"></param> public void ShowVideoes(List <VideoSourceInfo> videoes) { this.btnLeft.Visible = !(videoes == null || videoes.Count <= 1); this.btnRight.Visible = !(videoes == null || videoes.Count <= 1); _ActiveVideoes.Clear(); if (videoes != null) { for (int i = _Videoes.Count; i < videoes.Count; i++) { //VideoPanel video = VideoPanelFactory.CreatePanel(); //video.AllowDrop = true; //video.Name = "actiVideoPanel" + i.ToString(); //video.ShowTitle = true; //video.StretchToFit = true; //video.VideoSource = null; //this.videoPanel.Controls.Add(video); VideoSourceInfo videoinfo = videoes[i]; VideoPanel video = CreateVideoPanel(videoinfo.VideoSourceType, "actiVideoPanel" + i.ToString(), true); _Videoes.Add(video); } foreach (VideoPanel vp in _Videoes) { if (!videoes.Exists(v => v == vp.VideoSource)) { if (vp.Status == VideoStatus.Playing) { vp.Close(); } vp.VideoSource = null; } } foreach (VideoSourceInfo vs in videoes) { VideoPanel video = _Videoes.FirstOrDefault(vp => vp.VideoSource == vs); if (video == null) { VideoPanel p = _Videoes.FirstOrDefault(vp => vp.VideoSource == null); if (p != null) { if (vs.VideoSourceType != p.VideoType) { int index = _Videoes.FindIndex(vp => vp == p); if (index >= 0) { RemoveVideoPanel(p); //视频类型不同的,重新创建视频 VideoPanel panel = CreateVideoPanel(vs.VideoSourceType, p.Name, p.Visible); panel.Left = p.Left; panel.Top = p.Top; panel.Width = p.Width; panel.Height = p.Height; _Videoes[index] = panel; p = panel; } } p.VideoSource = vs; _ActiveVideoes.Add(p); } } else { _ActiveVideoes.Add(video); } } } if (_ActiveVideoes.Count > 0) { _CurImageIndex = 0; ShowVideo(_CurImageIndex); } else { _CurImageIndex = -1; ShowVideo(_CurImageIndex); } }
//从窗体控件中移除视频控件 private void RemoveVideoPanel(VideoPanel p) { p.Close(); p.VideoDragDropHandling -= VideoDragDropHandling; this.videoPanel.Controls.Remove(p); }
/// <summary> /// 在视频列表中显示一系列图片 /// </summary> /// <param name="imgs"></param> public void ShowVideoes(List <VideoSourceInfo> videoes) { this.btnLeft.Visible = !(videoes == null || videoes.Count <= 1); this.btnRight.Visible = !(videoes == null || videoes.Count <= 1); _ActiveVideoes.Clear(); if (videoes != null) { for (int i = _Videoes.Count; i < videoes.Count; i++) { VideoPanel video = VideoPanelFactory.CreatePanel(); video.AllowDrop = true; video.Name = "actiVideoPanel" + i.ToString(); video.ShowTitle = true; video.StretchToFit = true; video.VideoSource = null; this.videoPanel.Controls.Add(video); _Videoes.Add(video); } foreach (VideoPanel vp in _Videoes) { if (!videoes.Exists(v => v == vp.VideoSource)) { if (vp.Status == VideoStatus.Playing) { vp.Close(); } vp.VideoSource = null; } } foreach (VideoSourceInfo vs in videoes) { VideoPanel video = _Videoes.FirstOrDefault(vp => vp.VideoSource == vs); if (video == null) { VideoPanel p = _Videoes.FirstOrDefault(vp => vp.VideoSource == null); if (p != null) { p.VideoSource = vs; _ActiveVideoes.Add(p); } } else { _ActiveVideoes.Add(video); } } } if (_ActiveVideoes.Count > 0) { _CurImageIndex = 0; ShowVideo(_CurImageIndex); } else { _CurImageIndex = -1; ShowVideo(_CurImageIndex); } }