コード例 #1
0
ファイル: FileExplorer.cs プロジェクト: slagusev/Krea
        private FolderExplorerItem getFolderNode(FolderExplorerItem parentFolder, string path)
        {
            if (this.rootNode != null)
            {
                if (parentFolder.FolderInfo.FullName.Equals(path))
                {
                    return(parentFolder);
                }

                for (int i = 0; i < parentFolder.Nodes.Count; i++)
                {
                    if (parentFolder.Nodes[i] is FolderExplorerItem)
                    {
                        FolderExplorerItem item = parentFolder.Nodes[i] as FolderExplorerItem;
                        if (item.FolderInfo.FullName.Equals(path))
                        {
                            return(item);
                        }
                        else
                        {
                            FolderExplorerItem sub = this.getFolderNode(item, path);
                            if (sub != null)
                            {
                                return(sub);
                            }
                        }
                    }
                }
            }


            return(null);
        }
コード例 #2
0
ファイル: FileExplorer.cs プロジェクト: slagusev/Krea
        private FolderExplorerItem createFolderNode(DirectoryInfo info)
        {
            FolderExplorerItem itemExisting = this.getFolderNode(this.rootNode, info.FullName);

            if (itemExisting != null)
            {
                itemExisting.FolderInfo = info;
                itemExisting.Text       = info.Name;
                this.treeView1.Sort();
                return(itemExisting);
            }
            else
            {
                FolderExplorerItem folderParent = this.getFolderNode(this.rootNode, info.Parent.FullName);
                if (folderParent != null)
                {
                    FolderExplorerItem item = new FolderExplorerItem(info);
                    folderParent.Nodes.Add(item);
                    this.treeView1.Sort();

                    return(item);
                }

                return(null);
            }
        }
コード例 #3
0
ファイル: FileExplorer.cs プロジェクト: slagusev/Krea
        private void populateTree()
        {
            if (this.mainForm.CurrentProject != null)
            {
                DirectoryInfo info = new DirectoryInfo(this.mainForm.CurrentProject.ProjectPath);
                if (info.Exists)
                {
                    rootNode = new FolderExplorerItem(info);
                    GetDirectories(info.GetDirectories(), rootNode);
                    treeView1.Nodes.Add(rootNode);

                    // Create a new FileSystemWatcher and set its properties.
                    FileSystemWatcher watcher = new FileSystemWatcher();
                    watcher.Path = this.mainForm.CurrentProject.ProjectPath;

                    /* Watch for changes in LastAccess and LastWrite times, and
                     * the renaming of files or directories. */
                    watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite
                                           | NotifyFilters.FileName | NotifyFilters.DirectoryName;

                    watcher.IncludeSubdirectories = true;

                    // Add event handlers.
                    watcher.Created += new FileSystemEventHandler(watcher_Changed);
                    watcher.Deleted += new FileSystemEventHandler(watcher_Changed);
                    watcher.Renamed += new RenamedEventHandler(watcher_Renamed);

                    // Begin watching.
                    watcher.EnableRaisingEvents = true;
                }
            }
        }
コード例 #4
0
        public void FolderExplorerItem_WhenFolderAdviseGroupIsChanged_SendsPropertyChangedEventForIconKind()
        {
            // Arrange

            var folder = new FolderModel
            {
                AdviseGroup = null,
            };

            var target = new FolderExplorerItem(folder);

            var propertyChangedEvents = new List <PropertyChangedEventArgs>();

            target.PropertyChanged += (_, e) => propertyChangedEvents.Add(e);

            // Act

            folder.AdviseGroup = new AdviseGroupModel {
                Id = new ItemId("1"), Name = "New Advise Group"
            };

            // Assert

            var expectedProperties = new[]
            {
                nameof(FolderExplorerItem.IconKind),
            };

            propertyChangedEvents.Select(e => e.PropertyName).Should().BeEquivalentTo(expectedProperties);
        }
コード例 #5
0
ファイル: FileExplorer.cs プロジェクト: slagusev/Krea
        private FileExplorerItem directoryHasNode(FolderExplorerItem dir, string path)
        {
            if (dir != null)
            {
                for (int i = 0; i < dir.Nodes.Count; i++)
                {
                    if (dir.Nodes[i] is FileExplorerItem)
                    {
                        FileExplorerItem item = dir.Nodes[i] as FileExplorerItem;
                        if (item.FileInfo.FullName.Equals(path))
                        {
                            return(item);
                        }
                    }
                    else if (dir.Nodes[i] is FolderExplorerItem)
                    {
                        FolderExplorerItem item      = dir.Nodes[i] as FolderExplorerItem;
                        FileExplorerItem   itemFound = directoryHasNode(item, path);
                        if (itemFound != null)
                        {
                            return(itemFound);
                        }
                    }
                }
            }


            return(null);
        }
コード例 #6
0
        public void FolderExplorerItem_WhenFolderNameIsChanged_SendsPropertyChangedEventForTitle()
        {
            // Arrange

            var folder = new FolderModel
            {
                Name = "Old Name",
            };

            var target = new FolderExplorerItem(folder);

            var propertyChangedEvents = new List <PropertyChangedEventArgs>();

            target.PropertyChanged += (_, e) => propertyChangedEvents.Add(e);

            // Act

            folder.Name = "New Name";

            // Assert

            var expectedProperties = new[]
            {
                nameof(FolderExplorerItem.Title),
            };

            propertyChangedEvents.Select(e => e.PropertyName).Should().BeEquivalentTo(expectedProperties);
        }
コード例 #7
0
ファイル: FileExplorer.cs プロジェクト: slagusev/Krea
        private bool removeFolderNode(string path)
        {
            FolderExplorerItem itemExisting = this.getFolderNode(this.rootNode, path);

            if (itemExisting != null)
            {
                itemExisting.Remove();
                return(true);
            }
            return(false);
        }
コード例 #8
0
ファイル: FileExplorer.cs プロジェクト: slagusev/Krea
        private bool renameFolderNode(string oldfullName, DirectoryInfo info)
        {
            FolderExplorerItem itemExisting = this.getFolderNode(this.rootNode, oldfullName);

            if (itemExisting != null)
            {
                itemExisting.FolderInfo = info;
                itemExisting.Text       = info.Name;
                this.treeView1.Sort();
                return(true);
            }

            return(false);
        }
コード例 #9
0
ファイル: FileExplorer.cs プロジェクト: slagusev/Krea
        private void addFilesBt_Click_1(object sender, EventArgs e)
        {
            if (this.mainForm.CurrentProject != null && this.treeView1.SelectedNode != null && this.treeView1.SelectedNode is FolderExplorerItem)
            {
                try
                {
                    FolderExplorerItem currentFolder = this.treeView1.SelectedNode as FolderExplorerItem;
                    OpenFileDialog     openF         = new OpenFileDialog();
                    openF.Multiselect = true;
                    openF.Filter      = "All files type (*.*)|*.*";
                    if (openF.ShowDialog() == DialogResult.OK)
                    {
                        int count = 0;
                        for (int i = 0; i < openF.FileNames.Length; i++)
                        {
                            string filename = openF.FileNames[i];
                            if (File.Exists(filename))
                            {
                                File.Copy(filename, currentFolder.FolderInfo.FullName + "\\" + openF.SafeFileNames[i], true);

                                FileExplorerItem newItem = new FileExplorerItem(new FileInfo(currentFolder.FolderInfo.FullName + "\\" + openF.SafeFileNames[i]));
                                currentFolder.Nodes.Add(newItem);

                                count++;
                            }
                            else
                            {
                                MessageBox.Show("The file " + filename + " does not exist!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            }
                        }

                        this.treeView1.Sort();
                        if (count > 1)
                        {
                            MessageBox.Show(count + " files have been successfully imported!", "Importation succeed!", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        }
                        else
                        {
                            MessageBox.Show(count + " file has been successfully imported!", "Importation succeed!", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        }
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Error during file importation!\n" + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }
コード例 #10
0
ファイル: FileExplorer.cs プロジェクト: slagusev/Krea
        private void getFiles(DirectoryInfo parentDir, FolderExplorerItem nodeToAddTo)
        {
            FileExplorerItem aNode;

            FileInfo[] files = parentDir.GetFiles();


            foreach (FileInfo file in files)
            {
                aNode = this.getFileNode(file.FullName);
                if (aNode == null)
                {
                    aNode = new FileExplorerItem(file);
                    nodeToAddTo.Nodes.Add(aNode);
                }
            }
        }
コード例 #11
0
        public void IsDeletedGetter_ForDeletedFolder_ReturnsTrue()
        {
            // Arrange

            var folder = new FolderModel {
                DeleteDate = new DateTime(2021, 10, 25)
            };

            var target = new FolderExplorerItem(folder);

            // Act

            var isDeleted = target.IsDeleted;

            // Assert

            isDeleted.Should().BeTrue();
        }
コード例 #12
0
        public void IsDeletedGetter_ForActiveFolder_ReturnsFalse()
        {
            // Arrange

            var folder = new FolderModel {
                DeleteDate = null
            };

            var target = new FolderExplorerItem(folder);

            // Act

            var isDeleted = target.IsDeleted;

            // Assert

            isDeleted.Should().BeFalse();
        }
コード例 #13
0
ファイル: FileExplorer.cs プロジェクト: slagusev/Krea
        private void GetDirectories(DirectoryInfo[] subDirs,
                                    TreeNode nodeToAddTo)
        {
            FolderExplorerItem aNode;

            DirectoryInfo[] subSubDirs;
            foreach (DirectoryInfo subDir in subDirs)
            {
                aNode      = new FolderExplorerItem(subDir);
                subSubDirs = subDir.GetDirectories();
                if (subSubDirs.Length != 0)
                {
                    GetDirectories(subSubDirs, aNode);
                }
                nodeToAddTo.Nodes.Add(aNode);

                this.getFiles(subDir, aNode);
            }
        }
コード例 #14
0
        public void IconKindGetter_ForFolderWithoutAdviseGroup_ReturnsFolderIconKind()
        {
            // Arrange

            var folder = new FolderModel
            {
                AdviseGroup = null,
            };

            var target = new FolderExplorerItem(folder);

            // Act

            var iconKind = target.IconKind;

            // Assert

            iconKind.Should().Be(PackIconKind.Folder);
        }
コード例 #15
0
        public void TitleGetter_ReturnsFolderName()
        {
            // Arrange

            var folder = new FolderModel
            {
                Name = "Folder Name",
            };

            var target = new FolderExplorerItem(folder);

            // Act

            var title = target.Title;

            // Assert

            title.Should().Be("Folder Name");
        }
コード例 #16
0
        public void GetContextMenuItems_ForActiveFolder_ReturnsCorrectMenuItems()
        {
            // Arrange

            var folder = new FolderModel {
                DeleteDate = null
            };

            var adviseGroupHelperStub = new Mock <IAdviseGroupHelper>();

            adviseGroupHelperStub.Setup(x => x.AdviseGroups).Returns(Array.Empty <AdviseGroupModel>());

            var target = new FolderExplorerItem(folder);

            // Act

            var menuItems = target.GetContextMenuItems(Mock.Of <ILibraryExplorerViewModel>(), adviseGroupHelperStub.Object).ToArray();

            // Assert

            var expectedSetAdviseGroupItem = new ExpandableMenuItem
            {
                Header   = "Set Advise Group",
                IconKind = PackIconKind.FolderStar,
            };

            var expectedMenuItems = new[]
            {
                new CommandMenuItem(() => { }, false)
                {
                    Header = "Rename Folder", IconKind = PackIconKind.Pencil
                },
                new CommandMenuItem(() => { }, false)
                {
                    Header = "Delete Folder", IconKind = PackIconKind.DeleteForever
                },
            };

            // Nested items for advise group are covered by UT for BasicExplorerItem.
            menuItems[0].Should().BeEquivalentTo(expectedSetAdviseGroupItem, x => x.Excluding(y => y.Items));
            menuItems[1..].Should().BeEquivalentTo(expectedMenuItems, x => x.WithStrictOrdering());
コード例 #17
0
ファイル: FileExplorer.cs プロジェクト: slagusev/Krea
 public void watcher_Changed(object sender, FileSystemEventArgs args)
 {
     if (this.InvokeRequired)
     {
         dwatcher_Changed d         = new dwatcher_Changed(watcher_Changed);
         object[]         arguments = { sender, args };
         this.Invoke(d, arguments);
     }
     else
     {
         if (this.mainForm.Enabled == true)
         {
             if (args.ChangeType == WatcherChangeTypes.Created)
             {
                 if (Directory.Exists(args.FullPath))
                 {
                     DirectoryInfo      folderInfo = new DirectoryInfo(args.FullPath);
                     FolderExplorerItem folderNode = createFolderNode(folderInfo);
                     if (folderNode != null)
                     {
                         GetDirectories(folderInfo.GetDirectories(), folderNode);
                         getFiles(folderInfo, folderNode);
                     }
                 }
                 else
                 {
                     createFileNode(new FileInfo(args.FullPath));
                 }
             }
             else if (args.ChangeType == WatcherChangeTypes.Deleted)
             {
                 bool res = this.removeFileNode(args.FullPath);
                 if (res == false)
                 {
                     this.removeFolderNode(args.FullPath);
                 }
             }
         }
     }
 }
コード例 #18
0
        public void IconKindGetter_ForFolderWithFavoriteAdviseGroup_ReturnsFolderHeartIconKind()
        {
            // Arrange

            var folder = new FolderModel
            {
                AdviseGroup = new AdviseGroupModel
                {
                    Id         = new ItemId("1"),
                    Name       = "Some Advise Group",
                    IsFavorite = true,
                },
            };

            var target = new FolderExplorerItem(folder);

            // Act

            var iconKind = target.IconKind;

            // Assert

            iconKind.Should().Be(PackIconKind.FolderHeart);
        }