Beispiel #1
0
 /// <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;
     }
 }
Beispiel #2
0
 /// <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;
     }
 }
Beispiel #3
0
 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;
             }
         }
     }
 }
Beispiel #4
0
 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;
                            }
                        }
                    }
                }
            }
        }
Beispiel #6
0
        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);
        }