private void treeView_DrawNode(object sender, DrawTreeNodeEventArgs e) { TreeNodeLocalItem titem = e.Node as TreeNodeLocalItem; if (titem != null) { VisualStyleElement element = VisualStyleElement.TreeView.Item.Normal; if (e.State.HasFlag(TreeNodeStates.Selected) || titem.IsMultiSelect) { element = e.Node.TreeView.Focused ? VisualStyleElement.TreeView.Item.Selected : VisualStyleElement.TreeView.Item.SelectedNotFocus; } else if (e.State.HasFlag(TreeNodeStates.Hot)) { element = VisualStyleElement.TreeView.Item.Hot; } VisualStyleRenderer vsr = new VisualStyleRenderer("Explorer::TreeView", element.Part, element.State); Point drawLoc = titem.Bounds.Location; var imageSize = treeView.ImageList.ImageSize; drawLoc.X -= imageSize.Width; using (SolidBrush b = new SolidBrush(titem.BackColor)) { e.Graphics.FillRectangle(b, drawLoc.X, drawLoc.Y, titem.Bounds.Width + imageSize.Width, titem.Bounds.Height); } Rectangle textRect = vsr.GetBackgroundContentRectangle(e.Graphics, titem.Bounds); var pixelSize = DpiHelper.LogicalToDeviceUnits(new Size(1, 1)); textRect.Offset(pixelSize.Width, pixelSize.Height); bool disabled = titem.ExItem != null ? !titem.ExItem.IsInWorkspace : false; vsr.DrawText(e.Graphics, textRect, titem.Text, disabled, TextFormatFlags.VerticalCenter | TextFormatFlags.LeftAndRightPadding); ExtendedItem item = titem.ExItem; if (string.IsNullOrEmpty(titem.LocalItem)) { e.Graphics.DrawIcon(TFV.Properties.Resources.TFSServer, new Rectangle(drawLoc, imageSize)); } else { bool isFolder = false; if (item != null) { isFolder = item.ItemType == ItemType.Folder; } else { isFolder = Directory.Exists(titem.LocalItem); } if (isFolder) { e.Graphics.DrawIcon(titem.IsExpanded ? m_folderOpen : m_folderClosed, new Rectangle(drawLoc, imageSize)); } else { e.Graphics.DrawIcon((item != null) ? m_addedFileIcon : m_fileIcon, new Rectangle(drawLoc, imageSize)); } } if (item != null) { if (item.ChangeType.HasFlag(ChangeType.Add)) { imageListOverlays.Draw(e.Graphics, drawLoc, 0); } else if (item.ChangeType.HasFlag(ChangeType.Delete)) { imageListOverlays.Draw(e.Graphics, drawLoc, 3); } else if (item.ChangeType.HasFlag(ChangeType.Rollback)) { imageListOverlays.Draw(e.Graphics, drawLoc, 8); } else if (item.ChangeType.HasFlag(ChangeType.Merge)) { imageListOverlays.Draw(e.Graphics, drawLoc, 5); } else if (item.ChangeType.HasFlag(ChangeType.Edit)) { imageListOverlays.Draw(e.Graphics, drawLoc, 2); } if (!item.IsLatest && item.IsInWorkspace) { imageListOverlays.Draw(e.Graphics, drawLoc, 1); } if (item.HasOtherPendingChange) { imageListOverlays.Draw(e.Graphics, drawLoc, 7); } } } }
private void treeView_DrawNode(object sender, DrawTreeNodeEventArgs e) { TreeNodeServerItem titem = e.Node as TreeNodeServerItem; if (titem != null) { VisualStyleElement element = VisualStyleElement.TreeView.Item.Normal; if (e.State.HasFlag(TreeNodeStates.Selected) || titem.IsMultiSelect) { element = e.Node.TreeView.Focused ? VisualStyleElement.TreeView.Item.Selected : VisualStyleElement.TreeView.Item.SelectedNotFocus; } else if (e.State.HasFlag(TreeNodeStates.Hot)) { element = VisualStyleElement.TreeView.Item.Hot; } VisualStyleRenderer vsr = new VisualStyleRenderer("Explorer::TreeView", element.Part, element.State); Point drawLoc = titem.Bounds.Location; drawLoc.X -= imageListIcons.ImageSize.Width; using (SolidBrush b = new SolidBrush(titem.BackColor)) { e.Graphics.FillRectangle(b, drawLoc.X, drawLoc.Y, titem.Bounds.Width + imageListIcons.ImageSize.Width, titem.Bounds.Height); } Rectangle textRect = vsr.GetBackgroundContentRectangle(e.Graphics, titem.Bounds); var pixelSize = DpiHelper.LogicalToDeviceUnits(new Size(1, 1)); textRect.Offset(pixelSize.Width, pixelSize.Height); bool disabled = titem.ExItem != null ? !titem.ExItem.IsInWorkspace : false; vsr.DrawText(e.Graphics, textRect, titem.Text, disabled, TextFormatFlags.VerticalCenter | TextFormatFlags.LeftAndRightPadding); imageListIcons.Draw(e.Graphics, drawLoc, titem.IsExpanded ? titem.ExpandedImageIndex : titem.CollapsedImageIndex); ExtendedItem item = titem.ExItem; if (item != null) { if (item.ChangeType.HasFlag(ChangeType.Add)) { imageListOverlays.Draw(e.Graphics, drawLoc, 0); } else if (item.ChangeType.HasFlag(ChangeType.Delete)) { imageListOverlays.Draw(e.Graphics, drawLoc, 3); } else if (item.ChangeType.HasFlag(ChangeType.Rollback)) { imageListOverlays.Draw(e.Graphics, drawLoc, 8); } else if (item.ChangeType.HasFlag(ChangeType.Merge)) { imageListOverlays.Draw(e.Graphics, drawLoc, 5); } else if (item.ChangeType.HasFlag(ChangeType.Edit)) { imageListOverlays.Draw(e.Graphics, drawLoc, 2); } if (!item.IsLatest && item.IsInWorkspace) { imageListOverlays.Draw(e.Graphics, drawLoc, 1); } if (item.HasOtherPendingChange) { imageListOverlays.Draw(e.Graphics, drawLoc, 7); } } } }