/// <summary> /// Updates the Node's icon to reflect the collapsed state. /// </summary> private void BetterTreeView_BeforeCollapse(object sender, TreeViewCancelEventArgs e) { if (e.Node is BetterTreeNode) { BetterTreeNode n = (BetterTreeNode)e.Node; n.ImageIndex = n.CollapsedImageIndex; n.SelectedImageIndex = n.CollapsedImageIndex; } }
/// <summary> /// Updates the Node's icon to reflect the expanded state. /// </summary> void BetterTreeView_BeforeExpand(object sender, TreeViewCancelEventArgs e) { if (e.Node is BetterTreeNode) { BetterTreeNode n = (BetterTreeNode)e.Node; n.ImageIndex = n.ExpandedImageIndex; n.SelectedImageIndex = n.ExpandedImageIndex; } }
void BetterTreeView_AfterCheck(object sender, TreeViewEventArgs e) { foreach (TreeNode node in e.Node.Nodes) { if (node is BetterTreeNode) { BetterTreeNode childNode = node as BetterTreeNode; if (childNode.ShowCheckbox) { childNode.Checked = e.Node.Checked; } } } }
void BetterTreeView_DrawNode(object sender, DrawTreeNodeEventArgs e) { e.DrawDefault = true; if (e.Node is BetterTreeNode) { BetterTreeNode node = (BetterTreeNode)e.Node; if (node.DirtyState) { if (!node.ShowCheckbox) { HideCheckBox(node); } node.DirtyState = false; } } }
// public void LoadFiles(AbstractFolder[] folderList, AbstractFile[] fileList) // { // foreach(AbstractFolder folder in folderList) // AddTreeNode(folder.FullName); // // foreach(AbstractFile file in fileList) // AddTreeNode(file.FullName); // } /// <summary> /// Reads a string array of file names, and populates the control with /// nodes and child nodes as appropriate. /// </summary> /// <param name="nodeName">A string array containing the filenames to /// be added to the control.</param> public void AddTreeNode(string nodeName) { string[] parts = nodeName.Split('\\'); TreeNode n = this.Nodes[0]; for (int y = 0; y < parts.Length; y++) { bool addNodes = true; bool isFolder = true; if (y == parts.Length - 1) { if (parts[y].IndexOfAny(".".ToCharArray()) > 0) { // We can assume that is there is no '.' then this is // not a folder. This wouldn't work in a non-Halo setting. isFolder = false; } } if ((!isFolder) && (m_showFiles == ShowFilesBehavior.ChildControl)) { addNodes = false; } if (!addNodes) { // Add files to the node's Tag for persistance and forwarding // to the child IShowFiles control. string text = parts[parts.Length - 1]; if (n.Tag == null) { n.Tag = new FolderInformation(); } FolderInformation fi = (FolderInformation)n.Tag; ArrayList list = (ArrayList)fi.Items; if (!list.Contains(text)) { list.Add(nodeName); } } else { bool nodeFound = false; foreach (TreeNode node in n.Nodes) { if (node.Text == parts[y]) { nodeFound = true; n = node; break; } } if (!nodeFound) { if (!isFolder) // It's a file { BetterTreeNode newNode = new BetterTreeNode(parts[y]); newNode.CollapsedImageIndex = this.FileImageIndex; newNode.ExpandedImageIndex = this.FileImageIndex; newNode.ImageIndex = newNode.CollapsedImageIndex; if (n.Nodes.Count == 1) { if (n.Nodes[0] is DummyTreeNode) { n.Nodes.Clear(); } } n.Nodes.Add(newNode); n = newNode; } else // This is another folder. { if (parts[y] != "") { BetterTreeNode newNode = new BetterTreeNode(parts[y]); newNode.CollapsedImageIndex = 2; newNode.ExpandedImageIndex = 1; newNode.ImageIndex = newNode.CollapsedImageIndex; newNode.SelectedImageIndex = newNode.ImageIndex; newNode.Nodes.Add(new DummyTreeNode("Loading Data...")); FolderInformation fi = new FolderInformation(); string fullPath = ""; for (int z = 0; z < y + 1; z++) { fullPath += parts[z] + "\\"; } fullPath = fullPath.TrimEnd("\\".ToCharArray()); fi.FullPath = fullPath; newNode.Tag = fi; if (n.Nodes.Count == 1) { if (n.Nodes[0] is DummyTreeNode) { n.Nodes.Clear(); } } n.Nodes.Add(newNode); n = newNode; } } } } } }
protected override void WndProc(ref Message message) { const int WM_PAINT = 0x000F; const int WM_PRINTCLIENT = 0x0318; const int WM_ERASEBKGND = 0x0014; const int WM_KEYDOWN = 0x100; switch (message.Msg) { case WM_KEYDOWN: if ((int)message.WParam == 32) // Space { // See if our current node allows checkboxes. BetterTreeNode node = SelectedNode as BetterTreeNode; if (node != null) { if (!node.ShowCheckbox) { return; } } } break; case WM_ERASEBKGND: // Removes flicker. return; case WM_PAINT: // The designer host does not call OnResize(). if (internalGraphics == null) { OnResize(EventArgs.Empty); } // Set up Win32.RECT updateRect = new Win32.RECT(); if (Win32.GetUpdateRect(message.HWnd, ref updateRect, false) == 0) { break; } Win32.PAINTSTRUCT paintStruct = new Win32.PAINTSTRUCT(); IntPtr screenHdc = Win32.BeginPaint(message.HWnd, ref paintStruct); using (Graphics screenGraphics = Graphics.FromHdc(screenHdc)) { // Draw Internal Graphics. IntPtr hdc = internalGraphics.GetHdc(); Message printClientMessage = Message.Create(Handle, WM_PRINTCLIENT, hdc, IntPtr.Zero); DefWndProc(ref printClientMessage); internalGraphics.ReleaseHdc(hdc); // Add the missing OnPaint() call. OnPaint(new PaintEventArgs(internalGraphics, Rectangle.FromLTRB( updateRect.left, updateRect.top, updateRect.right, updateRect.bottom))); // Draw Screen Graphics. screenGraphics.DrawImage(internalBitmap, 0, 0); } Win32.EndPaint(message.HWnd, ref paintStruct); return; } base.WndProc(ref message); }