예제 #1
0
 public bool SetPathChecked(string fullPath)
 {
     if (fullPath.Equals(fFullPath, StringComparison.OrdinalIgnoreCase))
     {
         IsChecked = true;
         return(true);
     }
     if (fullPath.StartsWith(fFullPath, StringComparison.OrdinalIgnoreCase))
     {
         if (!fHasLoadedChildren)
         {
             LoadChildren();
         }
         foreach (object item in Items)
         {
             FolderTreeViewItem tvm = item as FolderTreeViewItem;
             if (tvm != null)
             {
                 if (tvm.SetPathChecked(fullPath))
                 {
                     return(true);
                 }
             }
         }
     }
     return(false);
 }
예제 #2
0
            private void LoadChildren()
            {
                if (fHasLoadedChildren)
                {
                    return;
                }
                // Existing item count (for later removal).  Should be only one.
                int existingCount = Items.Count;

                // Fill in the subfolders
                DirectoryInfo di = new DirectoryInfo(fFullPath);

                foreach (DirectoryInfo subDi in di.EnumerateDirectories())
                {
                    if ((subDi.Attributes & (FileAttributes.Hidden | FileAttributes.System)) == 0)
                    {
                        FolderTreeViewItem newItem = new FolderTreeViewItem();
                        newItem.FullPath = subDi.FullName;
                        if (fCheckBox.IsChecked == true)
                        {
                            newItem.fPropogating = true;
                            newItem.IsChecked    = IsSelected;
                            newItem.fPropogating = false;
                        }
                        Items.Add(newItem);
                    }
                }

                // Remove all placeholder items (paranoid code, there should only be one)
                for (; existingCount > 0; --existingCount)
                {
                    Items.RemoveAt(0);
                }
                fHasLoadedChildren = true;
            }
    /// <summary>
    /// 模块文件中单击选择文件
    /// </summary>
    /// <param name="t"></param>
    private void ModuleFileFolderSelectCallBack(FolderTreeViewItem t)
    {
        //Debug.Log(t.fullPath+ " depth :" + t.depth +" isDir :"+t.isDirectory);
        if (t.isDirectory)
            return;

        selectItemFullName = t.fullPath;
    }
예제 #4
0
 public FolderTreeView()
 {
     BeginInit();
     fRootItem = new FolderTreeViewItem();
     SetValue(ScrollViewer.HorizontalScrollBarVisibilityProperty, ScrollBarVisibility.Disabled);
     SetValue(KeyboardNavigation.DirectionalNavigationProperty, KeyboardNavigationMode.Cycle);
     Items.Add(fRootItem);
     EndInit();
 }
    /// <summary>
    /// 模块文件中双击操作,选择文件
    /// </summary>
    /// <param name="t"></param>
    private void ModuleFileDblclickItemCallBack(FolderTreeViewItem t)
    {
        if (t.isDirectory)
            return;

        selectFullFileName = t.fullPath;
        currentFileDataTable = LanguageDataUtils.LoadFileData(currentLanguage, selectFullFileName);
        toolbarOption = 1;
    }
        public ProjectExplorerViewModel(IProjectExplorerToolboxToolbarService toolbarService,
                                        IEventAggregator eventAggregator)
            : base(toolbarService)
        {
            _eventAggregator = eventAggregator;

            Name      = "Project Explorer";
            Title     = "Project Explorer";
            ContentId = "Project Explorer";//TODO : Move to constants
            IsVisible = false;


            _view = new ProjectExplorerView(this);
            View  = _view;



            Root = new ProjectTreeViewItem(null, false)
            {
                DisplayName = "Project A"
            };

            var pluginsFolder = new FolderTreeViewItem(Root, false)
            {
                DisplayName = "Plugins Folder"
            };
            var pluginCs = new CsCodeTreeViewItem(pluginsFolder, false)
            {
                DisplayName = "Plugin.cs"
            };


            var executionFolder = new FolderTreeViewItem(Root, false)
            {
                DisplayName = "Execution Folder"
            };


            var businessUnits_Execution_Designer = new ExecutionDesignerTreeViewItem(executionFolder, false)
            {
                DisplayName = "BusinessUnits.xml"
            };
            var businessUnits_Execution = new ExecutionTreeViewItem(businessUnits_Execution_Designer, false)
            {
                DisplayName = "Project A Execution 1.cs"
            };


            var tempCs = new CsCodeTreeViewItem(Root, false)
            {
                DisplayName = "Temp.cs"
            };


            OnPropertyChanged(() => Root);
        }
    /// <summary>
    /// 模块文件中双击操作,选择文件
    /// </summary>
    /// <param name="t"></param>
    private void ModuleFileDblclickItemCallBack(FolderTreeViewItem t)
    {
        if (t.isDirectory)
        {
            return;
        }

        selectEditorModuleName = t.fullPath.Replace("/", "_");;
        toolbarOption          = 1;
    }
예제 #8
0
 protected void PropogateToLeaves(bool isChecked)
 {
     if (fCheckBox.IsChecked != isChecked)
     {
         fPropogating        = true;
         fCheckBox.IsChecked = isChecked;
         foreach (object item in Items)
         {
             FolderTreeViewItem tvm = item as FolderTreeViewItem;
             if (tvm != null && tvm.IsChecked != isChecked)
             {
                 tvm.PropogateToLeaves(isChecked);
             }
         }
         fPropogating = false;
     }
 }
예제 #9
0
 public void LoadCheckedPaths(List <string> checkedPaths)
 {
     if (fCheckBox.IsChecked == true)
     {
         checkedPaths.Add(fFullPath);
         return;
     }
     else
     {
         foreach (object item in Items)
         {
             FolderTreeViewItem tvm = item as FolderTreeViewItem;
             if (tvm != null)
             {
                 tvm.LoadCheckedPaths(checkedPaths);
             }
         }
     }
 }
예제 #10
0
        public FolderTreeViewItem GetParent(TreeViewItem item)
        {
            FolderTreeViewItem folderItem = null;

            if (item != null)
            {
                var rdpItem = item as RdpTreeViewItem;
                if (rdpItem != null)
                {
                    folderItem = rdpItem.Parent as FolderTreeViewItem;
                }
                else
                {
                    folderItem = item as FolderTreeViewItem;
                }
            }

            return(folderItem);
        }
예제 #11
0
        public void AddRootToTreeView(ApplicationState appState)
        {
            _treeView.Items.Clear();
            var subDirPaths = Directory.GetDirectories(_rootDirectory);

            foreach (var sub in subDirPaths)
            {
                var folderItem = new FolderTreeViewItem(CreateDirectoryHeader(Path.GetFileName(sub)), sub)
                {
                    IsExpanded = appState.ExpandedPaths.Contains(sub)
                };
                _treeView.Items.Add(folderItem);
                AddChildren(folderItem, appState);
            }

            var filePaths = Directory.GetFiles(_rootDirectory, "*.rdp");

            foreach (var filePath in filePaths)
            {
                _treeView.Items.Add(CreateRdpItem(filePath));
            }
        }
예제 #12
0
        private void AddItemToTreeView(DirectoryModel item, TreeViewItem parent)
        {
            //var newItem = new TreeViewItem {Header = CreateDirectoryHeader(item.Name)};
            var newItem = new FolderTreeViewItem(CreateDirectoryHeader(item.Name), item.Path);

            foreach (var sub in item.SubDirectories)
            {
                AddItemToTreeView(sub, newItem);
            }
            foreach (var file in item.Files)
            {
                newItem.Items.Add(CreateRdpItem(file.Name, file.Path));
            }

            if (parent != null)
            {
                parent.Items.Add(newItem);
            }
            else
            {
                rdpTree.Items.Add(newItem);
            }
        }
예제 #13
0
        private void GetExpandedFolders(FolderTreeViewItem item, IList <string> folders)
        {
            IEnumerable <FolderTreeViewItem> expandedSubs;

            if (item == null)
            {
                expandedSubs =
                    _treeView.Items.Cast <TreeViewItem>()
                    .OfType <FolderTreeViewItem>()
                    .Where(i => i.IsExpanded);
            }
            else
            {
                expandedSubs = item.Items.Cast <TreeViewItem>()
                               .OfType <FolderTreeViewItem>()
                               .Where(i => i.IsExpanded);
            }

            foreach (FolderTreeViewItem sub in expandedSubs)
            {
                folders.Add(sub.Path);
                GetExpandedFolders(sub, folders);
            }
        }
예제 #14
0
        public void AddChildren(FolderTreeViewItem parent, ApplicationState appState)
        {
            parent.Items.Clear();
            var dirPath = parent.Path;

            var subDirPaths = Directory.GetDirectories(dirPath);

            foreach (var sub in subDirPaths)
            {
                var newItem = new FolderTreeViewItem(CreateDirectoryHeader(Path.GetFileName(sub)), sub)
                {
                    IsExpanded = appState.ExpandedPaths.Contains(sub)
                };
                parent.Items.Add(newItem);
                AddChildren(newItem, appState);
            }

            var filePaths = Directory.GetFiles(dirPath, "*.rdp");

            foreach (var filePath in filePaths)
            {
                parent.Items.Add(CreateRdpItem(filePath));
            }
        }
예제 #15
0
 public FileSystemStructureViewModel()
 {
     //Drivers = new ObservableCollection<FolderTreeViewItem>(FolderTreeViewItem.GetDrivers());
     Drivers = FolderTreeViewItem.GetDrivers();
 }
예제 #16
0
        private void AddRdpItem(object sender, RoutedEventArgs e)
        {
            //get the parent treeviewitem
            FolderTreeViewItem folderItem = null;
            var item = rdpTree.SelectedItem;

            if (item != null)
            {
                var rdpItem = item as RdpTreeViewItem;
                if (rdpItem != null)
                {
                    folderItem = rdpItem.Parent as FolderTreeViewItem;
                }
                else
                {
                    folderItem = item as FolderTreeViewItem;
                }
            }

            var directoryPath = folderItem != null ? folderItem.Path : _executingDirectory;

            var dialog = new AddDialog(directoryPath);

            var addLocation = GetElementPoint(add);

            dialog.Owner = this;
            dialog.Left  = Left + addLocation.X + add.ActualWidth + 7;

            dialog.Top = Top + addLocation.Y + HORRIBLE_CONSTANT;

            var result = dialog.ShowDialog();

            if (result.HasValue && result.Value)
            {
                var name = dialog.NewName;
                var host = dialog.Host;


                var filePath = Path.Combine(directoryPath, $"{name}.rdp");

                if (!File.Exists(filePath))
                {
                    FileHelper.GenerateRdpFile(filePath, host);

                    var newRdpItem = CreateRdpItem(name, filePath);

                    if (folderItem != null)
                    {
                        folderItem.Items.Add(newRdpItem);
                        folderItem.Items.Refresh();
                    }
                    else
                    {
                        rdpTree.Items.Add(newRdpItem);
                        rdpTree.Items.Refresh();
                    }

                    _root = new DirectoryModel(_executingDirectory);

                    LaunchRDPEdit(filePath);
                }
                else
                {
                    //todo handle
                }
            }
        }
예제 #17
0
            protected void PropogateToRoot(Nullable <bool> isChecked)
            {
                // If isChecked is not null (some checked), find out what it's value should be
                if (isChecked != null)
                {
                    bool hasChecked   = false;
                    bool hasUnchecked = false;
                    foreach (object item in Items)
                    {
                        FolderTreeViewItem tvm = item as FolderTreeViewItem;
                        if (tvm != null)
                        {
                            if (tvm.IsChecked == null)
                            {
                                hasChecked   = true;
                                hasUnchecked = true;
                                break;
                            }
                            else if (tvm.IsChecked == true)
                            {
                                hasChecked = true;
                                if (hasUnchecked)
                                {
                                    break;
                                }
                            }
                            else
                            {
                                hasUnchecked = true;
                                if (hasChecked)
                                {
                                    break;
                                }
                            }
                        }
                    }

                    if (hasChecked && hasUnchecked)
                    {
                        isChecked = null;
                    }
                    else if (hasChecked)
                    {
                        isChecked = true;
                    }
                    else
                    {
                        isChecked = false;
                    }
                }

                // If isChecked is different from current value, update it and propogate
                if (fCheckBox.IsChecked != isChecked)
                {
                    fPropogating        = true;
                    fCheckBox.IsChecked = isChecked;
                    FolderTreeViewItem tvm = Parent as FolderTreeViewItem;
                    if (tvm != null)
                    {
                        tvm.PropogateToRoot(isChecked);
                    }
                    fPropogating = false;
                }
            }
예제 #18
0
    protected override TreeViewItem BuildRoot()
    {
        FolderTreeViewItem root = new FolderTreeViewItem {
            id = 0, depth = -1, displayName = "Root"
        };

        var rows = GetFolderRows();

        if (allPath == null)
        {
            return(root);
        }
        foreach (var p in allPath)
        {
            string[] items = p.Split('/');


            string fullPath = "";
            for (int i = 0; i < items.Length; i++)
            {
                string displayName = items[i];
                if (string.IsNullOrEmpty(fullPath))
                {
                    fullPath = displayName;
                }
                else
                {
                    fullPath += "/" + displayName;
                }

                bool isDirectory = !(i == (items.Length - 1));

                bool isHaveItem = false;
                foreach (var item in rows)
                {
                    if (item.fullPath == fullPath && item.isDirectory == isDirectory)
                    {
                        isHaveItem = true;
                        break;
                    }
                }

                if (!isHaveItem)
                {
                    FolderTreeViewItem temp   = new FolderTreeViewItem(index, i, displayName, fullPath, isDirectory);
                    string             dir    = Path.GetDirectoryName(fullPath);
                    FolderTreeViewItem parent = null;
                    foreach (var item in rows)
                    {
                        if (item.fullPath == dir && item.isDirectory)
                        {
                            parent = item;
                            break;
                        }
                    }
                    if (parent != null)
                    {
                        parent.AddChild(temp);
                    }
                    else
                    {
                        root.AddChild(temp);
                    }
                    rows.Add(temp);
                    index++;
                }
            }
        }
        List <TreeViewItem> list = new List <TreeViewItem>();

        foreach (var item in rows)
        {
            list.Add(item);
        }

        //SetupParentsAndChildrenFromDepths(root, list);
        foreach (var item in rows)
        {
            if (item.hasChildren)
            {
                item.icon = folderIcon;
            }
            else
            {
                item.icon = fileIcon;
            }
        }
        return(root);
    }