private void CListView_MouseDown(object sender, MouseEventArgs e) { cursor = new Point(e.X, e.Y); mouseDown = true; try { if ((Control.ModifierKeys & Keys.Control) != Keys.Control) { foreach (ListViewItem d in Items) { d.Selected = false; } } for (int i = ScrollY; i < Items.Count; i++) { CListViewItem Item = (CListViewItem)Items[i]; int y = (i - scrollY + 1) * ItemHeight; if (e.Y >= y && e.Y <= y + ItemHeight) { Item.Selected = true; this.Refresh(); } } } catch { } }
void CListView_DragDrop(object sender, DragEventArgs e) { HoveredElement = GetElementUnderPosition(this.PointToClient(new Point(e.X, e.Y))); this.mouseDown = false; if (DragElements.Count > 0) { if (HoveredElement != null && AllowsReoreder) { CListViewItem context = DragElements[0]; CListViewItem targetSite = HoveredElement; List <int> indexes = new List <int>(); ReorderEventArgs args = new ReorderEventArgs(); args.Elements = DragElements; args.Position = this.Items.IndexOf(DragElements[0]); args.NewPosition = this.Items.IndexOf(HoveredElement); if (BeforeReorder != null) { BeforeReorder(this, args); } if (BeforeReorder == null || !args.Cancel) { // Reorder the elements in reality foreach (CListViewItem elm in DragElements) { indexes.Add(this.Items.IndexOf(elm)); this.Items.Remove(elm); } try { for (int i = 0; i < DragElements.Count; i++) { CListViewItem element = DragElements[i]; this.Items.Insert(i + args.NewPosition, element); } } catch (Exception ex) { for (int i = 0; i < DragElements.Count; i++) { CListViewItem element = DragElements[i]; this.Items.Insert(i + args.Position, element); } } args.Indexes = indexes.ToArray(); if (Reordered != null) { Reordered(this, args); } } } this.Refresh(); } this.Parent.Refresh(); }
void CListView_MouseDoubleClick(object sender, MouseEventArgs e) { for (int i = ScrollY; i < Items.Count; i++) { CListViewItem Item = (CListViewItem)Items[i]; int y = (i - scrollY + 1) * ItemHeight; if (e.Y >= y && e.Y <= y + ItemHeight) { if (Item.Track != null) { Item.Track.Play(); } } } }
void CListView_DragOver(object sender, DragEventArgs e) { HoveredElement = GetElementUnderPosition(this.PointToClient(new Point(e.X, e.Y))); BufferedGraphicsContext g = new BufferedGraphicsContext(); BufferedGraphics i = g.Allocate(this.CreateGraphics(), new Rectangle(0, 0, this.Width, this.Height)); this.DrawCore(i.Graphics, true); i.Graphics.DrawLine(new Pen(Color.White), new Point(0, ItemHeight * (this.Items.IndexOf(HoveredElement) + 1)), new Point(this.Width, ItemHeight * (this.Items.IndexOf(HoveredElement) + 1))); i.Render(); if (this.AllowsReoreder || true) { e.Effect = DragDropEffects.Copy; } }
public CListViewItem AddItem(CListViewItem Item) { CListViewItem item = Item; if (ItemAdded != null) { ItemAdded.Invoke(this, new ItemsAddedArgs(item)); } if (item.Index % 2 == 1) { item.BackColor = AlternativeColor; } item.Spawn = this; this.Items.Add(item); return(item); }
public CListViewItem GetElementUnderPosition(Point pos) { for (int i = 0; i < this.Items.Count; i++) { try { CListViewItem D = (CListViewItem)Items[i]; int top = (i + 1) * ItemHeight; if (pos.Y > top && pos.Y < top + itemHeight) { return(D); } } catch { } } return(null); }
void CListView_DragDrop(object sender, DragEventArgs e) { HoveredElement = GetElementUnderPosition(this.PointToClient(new Point(e.X, e.Y))); this.mouseDown = false; if (DragElements.Count > 0) { if (HoveredElement != null && AllowsReoreder) { CListViewItem context = DragElements[0]; CListViewItem targetSite = HoveredElement; List<int> indexes = new List<int>(); ReorderEventArgs args = new ReorderEventArgs(); args.Elements = DragElements; args.Position = this.Items.IndexOf(DragElements[0]); args.NewPosition = this.Items.IndexOf(HoveredElement); if (BeforeReorder != null) BeforeReorder(this, args); if (BeforeReorder == null || !args.Cancel) { // Reorder the elements in reality foreach (CListViewItem elm in DragElements) { indexes.Add(this.Items.IndexOf(elm)); this.Items.Remove(elm); } try { for (int i = 0; i < DragElements.Count; i++) { CListViewItem element = DragElements[i]; this.Items.Insert(i + args.NewPosition, element); } } catch (Exception ex) { for (int i = 0; i < DragElements.Count; i++) { CListViewItem element = DragElements[i]; this.Items.Insert(i + args.Position, element); } } args.Indexes = indexes.ToArray(); if (Reordered != null) Reordered(this, args); } } this.Refresh(); } this.Parent.Refresh(); }
protected override void OnMouseMove(MouseEventArgs e) { base.OnMouseMove(e); Cursor = Cursors.Default; if(mouseDown) if ((Diff(e.X, cursor.X) > 10 || Diff(e.Y, cursor.Y) > 10) && this.AllowsReoreder) { HoveredElement = GetElementUnderPosition(new Point(e.X, e.Y)); StringBuilder sb = new StringBuilder(); this.DragElements.Clear(); foreach (CListViewItem i in SelectedTracks) { sb.Append(i.Track.Uri); DragElements.Add(i); } DataObject d = new DataObject(System.Windows.Forms.DataFormats.Text, sb); DoDragDrop(d, DragDropEffects.Copy); } else { } /* for (int i = scrollY; i < scrollY + ContainingItems; i++) { try { ListViewItem D = Items[i]; int left = 0; int x = 0; int top = (i + scrollY + 1) * ItemHeight; foreach (ColumnHeader d in Columns) { if (D.SubItems[i].Text.StartsWith("$") && e.X >= left && e.X <= left + d.Width && e.Y <= top && e.Y >= top + ItemHeight) { Cursor = Cursors.Hand; } left += d.Width; x++; } } catch { } }*/ }
public CListViewItem AddItem(CListViewItem Item) { CListViewItem item = Item; if (ItemAdded != null) ItemAdded.Invoke(this, new ItemsAddedArgs(item)); if (item.Index % 2 == 1) { item.BackColor = AlternativeColor; } item.Spawn = this; this.Items.Add(item); return item; }
void DrawCore(Graphics g, bool final) { int ColumnCount = Columns.Count; int index = 0; g.FillRectangle(new SolidBrush(this.BackColor), new Rectangle(0, 0, this.Width, this.Height)); for (int i = 1; i < this.Height / ItemHeight; i++) { if (i % 2 == 1) { g.FillRectangle(new SolidBrush(AlternativeColor), new Rectangle(0, i * ItemHeight, this.Width, ItemHeight)); } } int Containing = ContainingItems; int CI = (Containing > Count - scrollY ? Containing : Count); for (int i = scrollY; i < scrollY + CI; i++) { int top = (i - scrollY + 1) * ItemHeight; if (i > Count) { continue; } CListViewItem Item = (CListViewItem)Items[i]; if (Item.Selected) { g.FillRectangle(new SolidBrush(SelectedBlock.BackColor), new Rectangle(0, top, this.Width, ItemHeight)); } if (Item.Playing) { g.FillRectangle(new SolidBrush(PlayingBlock.BackColor), new Rectangle(0, top, this.Width, ItemHeight)); } int left = 0; for (var x = 0; x < ColumnCount; x++) { var d = Columns[x]; Color FG = Item.Selected && !Item.Playing ? SelectedBlock.ForeColor : Item.Playing ? PlayingBlock.ForeColor : Block.ForeColor; try { if (x < Item.SubItems.Count) { String P = Item.SubItems[x].Text; float w = g.MeasureString(P, this.Font).Width; if ((int)w > d.Width) { StringBuilder R = new StringBuilder(); foreach (Char c in P) { R.Append(c); float r = TextRenderer.MeasureText(R.ToString(), this.Font).Width; if ((int)r > d.Width) { R.Remove(R.Length - 4, 1); P = R.ToString() + "..."; break; } } } P = P.TrimStart('$'); this.Block.Stylesheet.DrawString(g, P, this.Font, new SolidBrush(FG), new Rectangle(2 + left, top + GetItemPosition(ItemHeight, 16), 300, 20), final); left += d.Width; } } catch { } } if (UniDraw != null) { UniDraw(this, g, Item); } } int leftx = 0; g.DrawImage(HeaderBlock.BackgroundImage, new Rectangle(0, 0, this.Width, ItemHeight)); for (var x = 0; x < ColumnCount; x++) { var d = Columns[x]; g.DrawString(d.Text, HeaderBlock.Font, new SolidBrush(HeaderBlock.TextShadowColor), new Point(leftx + 2, GetItemPosition(ItemHeight, 18) + 2)); g.DrawString(d.Text, HeaderBlock.Font, new SolidBrush(HeaderBlock.ForeColor), new Point(leftx + 2, GetItemPosition(ItemHeight, 18) + 1)); leftx += d.Width; // g.DrawImage(MediaChrome.Resources.columnlimiter, new Rectangle(leftx - 2, 0, 2, ItemHeight)); } }
public void Init() { Clear(); if (m_scItemList == null || m_pfItem == null) { return; } m_ScrollView = m_scItemList.GetComponent <UIScrollView>(); m_Panel = m_scItemList.GetComponent <UIPanel>(); m_Panel.onClipMove = OnMove; if (m_Scrollbar != null) { EventDelegate.Add(m_Scrollbar.onChange, OnChangeScrollBar); ShowScrollbars(false); } Vector4 clip = m_Panel.baseClipRegion; Vector2 viewSize = new Vector2(clip.z, clip.w); m_fVIewYSize = viewSize.y; m_pfItem.SetActive(false); // original //Bounds bound = NGUIMath.CalculateRelativeWidgetBounds(m_Item.transform, true); //m_ItemSize = new Vector2(bound.size.x, bound.size.y); // modified[blueasa /2015-06-23] BoxCollider boxCollider = m_pfItem.GetComponent <BoxCollider>(); m_ItemSize = new Vector2(boxCollider.size.x, boxCollider.size.y); m_TotalItemSize = m_ItemSize + m_ItemPadding; m_columnCount = Mathf.RoundToInt(viewSize.x / m_TotalItemSize.x); m_rowCount = Mathf.RoundToInt(viewSize.y / m_TotalItemSize.y); m_MaxItemCountInView = m_columnCount * m_rowCount; if (m_ScrollView.movement == UIScrollView.Movement.Horizontal) { m_bHorizontal = true; m_columnCount = m_columnCount + m_AddRowORColumn; m_InitPosition.x = -(viewSize.x * 0.5f) + (m_TotalItemSize.x / 2.0f); m_InitPosition.y = m_TotalItemSize.y * (m_rowCount - 1) / 2.0f; m_InitBound = -(viewSize.x + m_ItemPadding.x) * 0.5f; } else if (m_ScrollView.movement == UIScrollView.Movement.Vertical) { m_bHorizontal = false; m_rowCount = m_rowCount + m_AddRowORColumn; m_InitPosition.x = -m_TotalItemSize.x * (m_columnCount - 1) / 2.0f; m_InitPosition.y = (viewSize.y / 2.0f) - (m_TotalItemSize.y / 2.0f); m_InitBound = (viewSize.y - m_ItemPadding.y) * 0.5f; } m_MaxItemCount = m_columnCount * m_rowCount; m_ExtentX2 = m_TotalItemSize.x * m_columnCount; m_ExtentY2 = m_TotalItemSize.y * m_rowCount; m_ExtentX = m_ExtentX2 * 0.5f; m_ExtentY = m_ExtentY2 * 0.5f; // 아이템 생성. CListViewItem item = null; for (int i = 0; i < m_MaxItemCount; ++i) { item = new CListViewItem(); item.m_Index = i; if (null != m_goCreatedItem && m_goCreatedItem.Length > i) { item.m_GameObject = m_goCreatedItem[i]; } else { item.m_GameObject = NGUITools.AddChild(m_scItemList, m_pfItem); } m_listItem.AddLast(item); } AddEvent(); Reset(); // 스크롤바 초기화[blueasa / 2018-07-26] if (null != m_Scrollbar) { UpdateScrollBars(); } }
private void Update() { int realIndex = 0; bool flag = true; float distance = 0.0f; Vector3 pos; Vector4 clip = m_Panel.finalClipRegion; Transform trans = null; CListViewItem item = null; // 앵커로 인한 view 사이즈 변동 확인 if (m_fVIewYSize != m_Panel.baseClipRegion.w) { if (false == m_bInitOnMovePanel) { Init(); } // else // Refresh(); } if (m_bHorizontal) { while (flag) { item = m_listItem.First.Value; trans = item.m_GameObject.transform; pos = trans.localPosition; distance = pos.x - clip.x; if (distance < -m_ExtentX) { for (int i = 0; i < m_rowCount; ++i) { item = m_listItem.First.Value; trans = item.m_GameObject.transform; pos = trans.localPosition; realIndex = item.m_Index + m_MaxItemCount; if (i == 0 && realIndex >= OnGetItemCount()) { flag = false; break; } item.m_Index = realIndex; pos.x += m_ExtentX2; trans.localPosition = pos; trans.name = realIndex.ToString(); if (realIndex < OnGetItemCount()) { OnUpdateItem(realIndex, item.m_GameObject); item.m_GameObject.SetActive(true); } else { item.m_GameObject.SetActive(false); } m_listItem.RemoveFirst(); m_listItem.AddLast(item); m_ScrollView.InvalidateBounds(); } } else { break; } } flag = true; while (flag) { item = m_listItem.Last.Value; trans = item.m_GameObject.transform; pos = trans.localPosition; distance = pos.x - clip.x; if (distance > m_ExtentX) { for (int i = 0; i < m_rowCount; ++i) { item = m_listItem.Last.Value; trans = item.m_GameObject.transform; pos = trans.localPosition; realIndex = item.m_Index - m_MaxItemCount; if (realIndex >= 0 && realIndex < OnGetItemCount()) { item.m_Index = realIndex; pos.x -= m_ExtentX2; trans.localPosition = pos; trans.name = realIndex.ToString(); OnUpdateItem(realIndex, item.m_GameObject); item.m_GameObject.SetActive(true); m_listItem.RemoveLast(); m_listItem.AddFirst(item); m_ScrollView.InvalidateBounds(); } else { flag = false; break; } } } else { break; } } } else { while (flag) { item = m_listItem.First.Value; trans = item.m_GameObject.transform; pos = trans.localPosition; distance = pos.y - clip.y; if (distance > m_ExtentY) { for (int i = 0; i < m_columnCount; ++i) { item = m_listItem.First.Value; trans = item.m_GameObject.transform; pos = trans.localPosition; realIndex = item.m_Index + m_MaxItemCount; if (i == 0 && realIndex >= OnGetItemCount()) { flag = false; break; } item.m_Index = realIndex; pos.y -= m_ExtentY2; trans.localPosition = pos; trans.name = realIndex.ToString(); if (realIndex < OnGetItemCount()) { OnUpdateItem(realIndex, item.m_GameObject); item.m_GameObject.SetActive(true); } else { item.m_GameObject.SetActive(false); } m_listItem.RemoveFirst(); m_listItem.AddLast(item); m_ScrollView.InvalidateBounds(); } } else { break; } } flag = true; while (flag) { item = m_listItem.Last.Value; trans = item.m_GameObject.transform; pos = trans.localPosition; distance = pos.y - clip.y; if (distance < -m_ExtentY) { for (int i = 0; i < m_columnCount; ++i) { item = m_listItem.Last.Value; trans = item.m_GameObject.transform; pos = trans.localPosition; realIndex = int.Parse(trans.name) - m_MaxItemCount; if (realIndex >= 0 && realIndex < OnGetItemCount()) { item.m_Index = realIndex; pos.y += m_ExtentY2; trans.localPosition = pos; trans.name = realIndex.ToString(); OnUpdateItem(realIndex, item.m_GameObject); item.m_GameObject.SetActive(true); m_listItem.RemoveLast(); m_listItem.AddFirst(item); m_ScrollView.InvalidateBounds(); } else { flag = false; break; } } } else { break; } } } UpdateScrollViewDragging(); }