public Rectangle GetItemBounds(TimelineListItem item) { int bound_left = 0; int bound_width = Width; if (m_Scrollbar.Visible) { bound_left = m_Scrollbar.Width; bound_width = Width - m_Scrollbar.Width; } for (int i = 0; i < m_VisibleItems.Count; ++i) { if (m_VisibleItems[i] != item) { continue; } Rectangle itemBounds = new Rectangle(); itemBounds.X = bound_left; itemBounds.Y = i * m_ItemHeight; itemBounds.Width = bound_width - 1; itemBounds.Height = m_ItemHeight; return(itemBounds); } return(new Rectangle(0, 0, 0, 0)); }
//---------------------------------------------------------------------------------------- public void ShowItem(TimelineStreams item) { for (int i = 0; i < item.GetStreamCount(); ++i) { TimelineListItem li = new TimelineListItem(); li.Streams = item; li.StreamIndex = i; m_Items.Add(li); } int visible_count = Height / m_ItemHeight; if (visible_count < m_Items.Count) { m_Scrollbar.Enabled = true; m_Scrollbar.Minimum = 0; m_Scrollbar.Maximum = m_Items.Count - visible_count - 1; m_Scrollbar.Visible = true; m_Scrollbar.Maximum = m_Scrollbar.Maximum + m_Scrollbar.LargeChange; } else { m_Scrollbar.Enabled = false; m_Scrollbar.Visible = false; } UpdateVisibleList(); }
public void Clear() { m_Items.Clear(); m_Scrollbar.Enabled = false; m_Scrollbar.Visible = false; m_VisibleItems.Clear(); m_SelectedItem = null; Invalidate(); }
protected override void OnMouseDown(MouseEventArgs e) { base.OnMouseDown(e); TimelineListItem item = GetItemInPosition(e.X, e.Y); if (item != null) { Rectangle itemBound = GetItemBounds(item); //如果是按在色彩方块中,则修改相应的色彩方块,否则选中当前项目 Rectangle rect = new Rectangle(itemBound.Right - 20, itemBound.Top + (m_ItemHeight - 10) / 2, 10, 10); if (rect.Contains(e.X, e.Y)) { item.Streams.SetStreamEnable(item.StreamIndex, !item.Streams.GetStreamEnable(item.StreamIndex)); Invalidate(itemBound); return; } m_SelectedItem = item; } else { m_SelectedItem = null; } Invalidate(); }