void FileStatusListView_MouseMove(object sender, MouseEventArgs e) { ListView listView = sender as ListView; //DRAG // If the mouse moves outside the rectangle, start the drag. if (dragBoxFromMouseDown != Rectangle.Empty && !dragBoxFromMouseDown.Contains(e.X, e.Y)) { if (SelectedItems.Any()) { StringCollection fileList = new StringCollection(); foreach (GitItemStatus item in SelectedItems) { string fileName = Path.Combine(Module.WorkingDir, item.Name); fileList.Add(fileName.ToNativePath()); } DataObject obj = new DataObject(); obj.SetFileDropList(fileList); // Proceed with the drag and drop, passing in the list item. DoDragDrop(obj, DragDropEffects.Copy); dragBoxFromMouseDown = Rectangle.Empty; } } //TOOLTIP if (listView != null) { var point = new Point(e.X, e.Y); var hover = listView.HitTest(point); if (hover.Item != null) { var gitItemStatus = (GitItemStatus)hover.Item.Tag; string text; if (gitItemStatus.IsRenamed || gitItemStatus.IsCopied) { text = string.Concat(gitItemStatus.Name, " (", gitItemStatus.OldName, ")"); } else { text = gitItemStatus.Name; } float fTextWidth = listView.CreateGraphics().MeasureString(text, listView.Font).Width + 17; //Use width-itemheight because the icon drawn in front of the text is the itemheight if (fTextWidth > (FileStatusListView.Width - FileStatusListView.GetItemRect(hover.Item.Index).Height)) { if (!hover.Item.ToolTipText.Equals(gitItemStatus.ToString())) { hover.Item.ToolTipText = gitItemStatus.ToString(); } } else { hover.Item.ToolTipText = ""; } } } }
public void EndUpdate() { FileStatusListView.EndUpdate(); }
private void UpdateFileStatusListView(bool updateCausedByFilter = false) { if (_itemsDictionary == null || !_itemsDictionary.Any()) { HandleVisibility_NoFilesLabel_FilterComboBox(filesPresent: false); } else { EnsureSelectedIndexChangeSubscription(); HandleVisibility_NoFilesLabel_FilterComboBox(filesPresent: true); } FileStatusListView.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent); var previouslySelectedItems = new List <GitItemStatus>(); if (updateCausedByFilter) { foreach (ListViewItem Item in FileStatusListView.SelectedItems) { previouslySelectedItems.Add((GitItemStatus)Item.Tag); } if (DataSourceChanged != null) { DataSourceChanged(this, new EventArgs()); } } FileStatusListView.BeginUpdate(); FileStatusListView.ShowGroups = _itemsDictionary != null && _itemsDictionary.Count > 1; FileStatusListView.Groups.Clear(); FileStatusListView.Items.Clear(); if (_itemsDictionary != null) { var clientSizeWidth = AppSettings.TruncatePathMethod == "compact" || AppSettings.TruncatePathMethod == "trimstart"; var fileNameOnlyMode = AppSettings.TruncatePathMethod == "fileNameOnly"; var list = new List <ListViewItem>(); foreach (var pair in _itemsDictionary) { ListViewGroup group = null; if (!String.IsNullOrEmpty(pair.Key)) { var groupName = ""; if (pair.Key == CombinedDiff.Text) { groupName = CombinedDiff.Text; } else { groupName = _DiffWithParent.Text + " " + GetDescriptionForRevision(pair.Key); } group = new ListViewGroup(groupName); group.Tag = pair.Key; FileStatusListView.Groups.Add(group); } foreach (var item in pair.Value) { if (_filter.IsMatch(item.Name)) { var text = item.Name; if (clientSizeWidth) { // list-item has client width, so we don't need horizontal scrollbar (which is determined by this text width) text = string.Empty; } else if (fileNameOnlyMode) { // we need to put filename in list-item text -> then horizontal scrollbar // will have proper width (by the longest filename, and not all path) text = PathFormatter.FormatTextForFileNameOnly(item.Name, item.OldName); text = AppendItemSubmoduleStatus(text, item); } var listItem = new ListViewItem(text, group); listItem.ImageIndex = GetItemImageIndex(item); if (item.SubmoduleStatus != null && !item.SubmoduleStatus.IsCompleted) { var capturedItem = item; item.SubmoduleStatus.ContinueWith((task) => listItem.ImageIndex = GetItemImageIndex(capturedItem), CancellationToken.None, TaskContinuationOptions.OnlyOnRanToCompletion, TaskScheduler.FromCurrentSynchronizationContext()); } if (previouslySelectedItems.Contains(item)) { listItem.Selected = true; } listItem.Tag = item; list.Add(listItem); } } } FileStatusListView.Items.AddRange(list.ToArray()); } if (updateCausedByFilter == false) { FileStatusListView_SelectedIndexChanged(); if (DataSourceChanged != null) { DataSourceChanged(this, new EventArgs()); } if (SelectFirstItemOnSetItems) { SelectFirstVisibleItem(); } } FileStatusListView_SizeChanged(null, null); FileStatusListView.SetGroupState(ListViewGroupState.Collapsible); FileStatusListView.EndUpdate(); }
public void BeginUpdate() { FileStatusListView.BeginUpdate(); }
private void UpdateFileStatusListView(bool updateCausedByFilter = false) { if (_itemsDictionary == null || !_itemsDictionary.Any()) { HandleVisibility_NoFilesLabel_FilterComboBox(filesPresent: false); } else { EnsureSelectedIndexChangeSubscription(); HandleVisibility_NoFilesLabel_FilterComboBox(filesPresent: true); } FileStatusListView.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent); var previouslySelectedItems = new List <GitItemStatus>(); if (updateCausedByFilter) { foreach (ListViewItem Item in FileStatusListView.SelectedItems) { previouslySelectedItems.Add((GitItemStatus)Item.Tag); } if (DataSourceChanged != null) { DataSourceChanged(this, new EventArgs()); } } FileStatusListView.BeginUpdate(); FileStatusListView.ShowGroups = _itemsDictionary != null && _itemsDictionary.Count > 1; FileStatusListView.Groups.Clear(); FileStatusListView.Items.Clear(); if (_itemsDictionary != null) { var list = new List <ListViewItem>(); foreach (var pair in _itemsDictionary) { ListViewGroup group = null; if (!String.IsNullOrEmpty(pair.Key)) { var groupName = ""; if (pair.Key == CombinedDiff.Text) { groupName = CombinedDiff.Text; } else { string shortHash = pair.Key.Length > 8 ? pair.Key.Substring(0, 8) : pair.Key; groupName = _DiffWithParent.Text + " " + shortHash; } group = new ListViewGroup(groupName); group.Tag = pair.Key; FileStatusListView.Groups.Add(group); } foreach (var item in pair.Value) { if (_filter.IsMatch(item.Name)) { var listItem = new ListViewItem(item.Name, group); listItem.ImageIndex = GetItemImageIndex(item); if (item.SubmoduleStatus != null && !item.SubmoduleStatus.IsCompleted) { var capturedItem = item; item.SubmoduleStatus.ContinueWith((task) => listItem.ImageIndex = GetItemImageIndex(capturedItem), CancellationToken.None, TaskContinuationOptions.OnlyOnRanToCompletion, TaskScheduler.FromCurrentSynchronizationContext()); } if (previouslySelectedItems.Contains(item)) { listItem.Selected = true; } listItem.Tag = item; list.Add(listItem); } } } FileStatusListView.Items.AddRange(list.ToArray()); } if (updateCausedByFilter == false) { FileStatusListView_SelectedIndexChanged(); if (DataSourceChanged != null) { DataSourceChanged(this, new EventArgs()); } if (SelectFirstItemOnSetItems) { SelectFirstVisibleItem(); } } FileStatusListView_SizeChanged(null, null); FileStatusListView.SetGroupState(ListViewGroupState.Collapsible); FileStatusListView.EndUpdate(); }