예제 #1
0
 public ColumnNode(ColumnNode node)
 {
     NodeControl1 = node.NodeControl1;
     NodeControl2 = node.NodeControl2;
     NodeControl3 = node.NodeControl3;
     NodeControl4 = node.NodeControl4;
     Text         = this.NodeControl1;
     Tag          = node.Tag;
 }
        static void UpdateParentCheckState(ColumnNode parentNode)
        {
            CheckState origState = parentNode.CheckState;
            int        UnCheckedNodes = 0, CheckedNodes = 0, MixedNodes = 0;

            foreach (ColumnNode tnChild in parentNode.Nodes)
            {
                if (tnChild.CheckState == CheckState.Checked)
                {
                    CheckedNodes++;
                }
                else if (tnChild.CheckState == CheckState.Indeterminate)
                {
                    MixedNodes++;
                    break;
                }
                else
                {
                    UnCheckedNodes++;
                }
            }

            if (MixedNodes > 0)
            {
                // at least one child is mixed, so parent must be mixed
                parentNode.CheckState = CheckState.Indeterminate;
            }
            else if (CheckedNodes > 0 && UnCheckedNodes == 0)
            {
                // all children are checked
                //if (parentNode.CheckState == CheckState.Indeterminate)
                parentNode.CheckState = CheckState.Checked;
                //parentNode.CheckState = CheckState.Indeterminate;
                //else
                //   parentNode.CheckState = CheckState.Indeterminate;
            }
            else if (CheckedNodes > 0)
            {
                // some children are checked, the rest are unchecked
                parentNode.CheckState = CheckState.Indeterminate;
            }
            if (CheckedNodes == 0 && MixedNodes == 0)
            {
                //if (parentNode.CheckState != CheckState.Unchecked)
                //    parentNode.CheckState = CheckState.Indeterminate;
                // all children are unchecked
                //if (parentNode.CheckState == CheckState.Checked)
                //    parentNode.CheckState = CheckState.Indeterminate;
                //else
                parentNode.CheckState = CheckState.Unchecked;
            }

            if (parentNode.CheckState != origState && parentNode.Parent.Index != -1)
            {
                UpdateParentCheckState((ColumnNode)parentNode.Parent);
            }
        }
        private bool filter(object obj)
        {
            TreeNodeAdv viewNode   = obj as TreeNodeAdv;
            Node        n          = viewNode != null ? viewNode.Tag as Node : obj as Node;
            ColumnNode  nn         = (ColumnNode)n;
            bool        hideByName = n == null || n.Text.ToUpper().Contains(this.filter_textBox.Text.ToUpper()) || n.Nodes.Any(filter);

            return(hideByName);
        }
예제 #4
0
        public int Compare(object x, object y)
        {
            //string g = x.GetType().ToString();
            ColumnNode a = (ColumnNode)x;
            ColumnNode b = (ColumnNode)y;

            if ((a.Tag == null || a.Tag.GetType().ToString() == "CloudFolderBrowser.CloudFolder") && (b.Tag != null && b.Tag.GetType().ToString() != "CloudFolderBrowser.CloudFolder"))
            {
                return(-1);
            }
            if ((b.Tag == null || b.Tag.GetType().ToString() == "CloudFolderBrowser.CloudFolder") && (a.Tag != null && a.Tag.GetType().ToString() != "CloudFolderBrowser.CloudFolder"))
            {
                return(1);
            }

            int res = 0;

            if (_mode == "Created")
            {
                res = DateTime.Compare(DateTime.Parse(a.NodeControl2), DateTime.Parse(b.NodeControl2));
            }
            if (_mode == "Modified")
            {
                res = DateTime.Compare(DateTime.Parse(a.NodeControl3), DateTime.Parse(b.NodeControl3));
            }
            if (_mode == "Size")
            {
                if (Double.Parse(a.NodeControl4.Replace(" MB", "")) < Double.Parse(b.NodeControl4.Replace(" MB", "")))
                {
                    res = -1;
                }
                else if (Double.Parse(a.NodeControl4.Replace(" MB", "")) > Double.Parse(b.NodeControl4.Replace(" MB", "")))
                {
                    res = 1;
                }
            }
            if (_mode == "Name")
            {
                res = string.Compare(a.NodeControl1, b.NodeControl1);
            }

            if (_order == SortOrder.Ascending)
            {
                return(-res);
            }
            else
            {
                return(res);
            }
        }
        void NodeCheckStateChanged(object sender, TreePathEventArgs e)
        {
            ColumnNode checkedNode = (ColumnNode)e.Path.FirstNode;

            if (checkedNode.CheckState == CheckState.Checked)
            {
                //if (checkedNode.Parent.CheckState != CheckState.Checked && checkedNode.Parent.Index !=-1)
                //    UpdateParentCheckState((ColumnNode)checkedNode.Parent);
                //CheckAllSubnodes(checkedNode, false);
                //checkedFilesSize += ((CloudFolder)checkedNode.Tag).Size - ((CloudFolder)checkedNode.Tag).SizeTopDirectoryOnly;
                //label1.Text = $"{Math.Round(checkedFilesSize / 1024000.0, 2)} MB checked";
            }
            else if (checkedNode.CheckState == CheckState.Unchecked)
            {
                //checkedFilesSize -= ((CloudFolder)checkedNode.Tag).Size;
                //if (checkedFilesSize < 0.0001)
                //    checkedFilesSize = 0;
                //label1.Text = $"{Math.Round(checkedFilesSize / 1024000.0, 2)} MB checked";

                //if (checkedNode.Parent.Index != -1)
                //    UpdateParentCheckState((ColumnNode)checkedNode.Parent);
                //CheckAllSubnodes(checkedNode, true);
            }
            else if (checkedNode.CheckState == CheckState.Indeterminate)
            {
                if (checkedNode.Tag?.GetType().ToString() == "CloudFolderBrowser.CloudFile")
                {
                    checkedNode.CheckState = CheckState.Unchecked;
                }
                //checkedFilesSize += ((CloudFolder)checkedNode.Tag).SizeTopDirectoryOnly;//((CloudFolder)parentNode.Tag).Files.Sum(x => x.Size) / 1024000.0;
                //checkedFilesSize = Math.Round(checkedFilesSize, 2);
                //label1.Text = $"{Math.Round(checkedFilesSize / 1024000.0, 2)} MB checked";
                //if(parentNode.Parent.Index != -1)
                //UpdateParentCheckState((ColumnNode)parentNode.Parent);
                //CheckAllSubnodes(parentNode, true);
            }
            if (checkedNode.Parent.Index != -1)
            {
                UpdateParentCheckState((ColumnNode)checkedNode.Parent);
            }
        }
        public SyncFilesForm(CloudFolder newFilesFolder, CloudServiceType cloudServiceName)
        {
            InitializeComponent();

            SendMessage(filter_textBox.Handle, 0x1501, 1, "Filter by name");

            overwriteMode_comboBox.DataSource    = new BindingSource(overwriteModes, null);
            overwriteMode_comboBox.DisplayMember = "Value";
            overwriteMode_comboBox.ValueMember   = "Key";

            nodeCheckBox2.IsVisibleValueNeeded += CheckIndex;

            cloudServiceType = cloudServiceName;
            if (cloudServiceType == CloudServiceType.Mega)
            {
                downloadMega_button.Enabled  = true;
                getJdLinks_button.Enabled    = false;
                downloadFiles_button.Enabled = false;
            }
            if (cloudServiceType == CloudServiceType.Yadisk)
            {
                if (Properties.Settings.Default.loginedYandex)
                {
                    addFilesToYadisk_button.Enabled = true;
                }

                getJdLinks_button.Enabled    = true;
                downloadFiles_button.Enabled = false;
            }

            progressBars = new List <ProgressBar> {
                progressBar1, progressBar2, progressBar3, progressBar4
            };
            progressLabels = new List <Label> {
                label1, label2, label3, label4, DownloadProgress_label
            };

            rootFolder = newFilesFolder;
            nodeCheckBox2.CheckStateChanged     += new EventHandler <TreePathEventArgs>(NodeCheckStateChanged);
            newFilesTreeViewAdv.ShowNodeToolTips = true;
            newFilesTreeViewAdv.NodeControls[2].ToolTipProvider = new ToolTipProvider();
            newFilesTreeViewAdv.NodeFilter = filter;
            //newFilesTreeViewAdv.Expanded += new EventHandler<TreeViewAdvEventArgs>(Form1.treeViewAdv_Expanded);
            //newFilesTreeViewAdv.Collapsed += new EventHandler<TreeViewAdvEventArgs>(Form1.treeViewAdv_Expanded);

            newFiles_model     = new TreeModel();
            newFilesFlat_model = new TreeModel();

            ColumnNode rootFlatNode = new ColumnNode(newFilesFolder.Name, newFilesFolder.Created, newFilesFolder.Modified, newFilesFolder.Size);

            newFilesFlat_model.Nodes.Add(rootFlatNode);
            ColumnNode rootNode = new ColumnNode(newFilesFolder.Name, newFilesFolder.Created, newFilesFolder.Modified, newFilesFolder.Size);

            //rootNode.Tag = newFilesFolder;
            newFilesTreeViewAdv.Model = new SortedTreeModel(newFiles_model);
            newFilesTreeViewAdv.BeginUpdate();
            newFiles_model.Nodes.Add(rootNode);

            foreach (CloudFile file in newFilesFolder.Files)
            {
                ColumnNode ffileNode = new ColumnNode(file.Name, file.Created, file.Modified, file.Size);
                ffileNode.Tag = file;
                rootFlatNode.Nodes.Add(ffileNode);

                string[] folders = ParsePath(file.Path);
                if (folders == null)
                {
                    ColumnNode subNode = new ColumnNode(file.Name, file.Created, file.Modified, file.Size);
                    subNode.Tag = file;
                    rootNode.Nodes.Add(subNode);
                }
                else
                {
                    ColumnNode currentNode = rootNode;
                    //creating folders nodes and file node from file path
                    string currentFolderPath = @"/"; //+ folders[0] + @"/";
                    for (int i = 0; i < folders.Length; i++)
                    {
                        if (folders[i] == "")
                        {
                        }
                        currentFolderPath += folders[i] + @"/";
                        ColumnNode subNode = new ColumnNode(folders[i], file.Created, file.Modified, 0);
                        if (currentNode.Nodes.ToList().ConvertAll(x => x.Text).Contains(folders[i]))
                        {
                            currentNode = (ColumnNode)currentNode.Nodes.ToList().Find(x => x.Text == folders[i]);
                        }
                        else
                        {
                            currentNode.Nodes.Add(subNode);
                            currentNode = subNode;
                        }
                        if (i == folders.Length - 1)
                        {
                            ColumnNode fileNode = new ColumnNode(file.Name, file.Created, file.Modified, file.Size);
                            fileNode.Tag = file;
                            currentNode.Nodes.Add(fileNode);
                        }
                    }
                }
            }
            //Form1.BuildSubfolderNodes(rootNode);
            //BuildFullFolderStructure(rootNode);
            newFilesTreeViewAdv.EndUpdate();
            newFilesTreeViewAdv.Root.Children[0].Expand();
            newFiles_model.Nodes[0].CheckState = CheckState.Checked;

            this.Show();
            //CheckAllSubnodes(newFiles_model.Nodes[0], false);
        }