Exemplo n.º 1
0
        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);
                    }
                }
            }
        }
Exemplo n.º 2
0
        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);
                    }
                }
            }
        }