/// <summary> /// 获取文件夹下的所有文件夹 /// </summary> /// <param name="directoryPath">路径</param> /// <returns></returns> public static ObservableCollection <ResourceBrowserItem> GetDirectorys(string directoryPath) { if (directoryPath.IsNullOrEmptyOrWhiteSpace()) { return(null); } ObservableCollection <ResourceBrowserItem> items = new ObservableCollection <ResourceBrowserItem>(); DirectoryInfo info = new DirectoryInfo(directoryPath); // 获取所有的文件夹 try { foreach (DirectoryInfo directory in info.GetDirectories()) { try { ResourceBrowserItem i = new ResourceBrowserItem(directory.FullName, false); items.Add(i); } catch { } } } catch { } return(items); }
/// <summary> /// 查找底第index位序的token节点 /// </summary> /// <param name="root">开始查找的节点</param> /// <param name="index">标志为序</param> /// <param name="tokens">标志集合</param> /// <returns></returns> private static ResourceBrowserItem _FindItem(ResourceBrowserItem root, int index, string[] tokens) { if (tokens == null || index >= tokens.Length || root == null) { return(null); } string token = tokens[index].ToLower(); if (root.Token.Equals(token)) { if (index == tokens.Length - 1) { return(root); } if (root.Items == null) { return(null); } foreach (ResourceBrowserItem item in root.Items) { ResourceBrowserItem result = _FindItem(item, index + 1, tokens); if (result != null) { return(result); } } } return(null); }
private void PART_Tree_OnNodeChanged(object sender, DevExpress.Xpf.Grid.TreeList.TreeListNodeChangedEventArgs e) { if (e.ChangeType == NodeChangeType.Add) { ResourceBrowserItem item = e.Node.Content as ResourceBrowserItem; if (item == null) { return; } if (item.Items.IsInvalid()) { try { if (System.IO.Directory.GetDirectories(item.FullPath).Any()) { e.Node.IsExpandButtonVisible = DevExpress.Utils.DefaultBoolean.True; } else { e.Node.IsExpandButtonVisible = DevExpress.Utils.DefaultBoolean.False; } } catch { e.Node.IsExpandButtonVisible = DevExpress.Utils.DefaultBoolean.True; } } else { e.Node.IsExpandButtonVisible = DevExpress.Utils.DefaultBoolean.True; } } }
/// <summary> /// 列表选中改变 /// </summary> private void PART_Grid_OnSelectedChanged(object sender, DevExpress.Xpf.Grid.SelectedItemChangedEventArgs e) { ResourceBrowserItem item = this.PART_Grid.GetSelectedValue() as ResourceBrowserItem; if (this.ResourceBrowserType == Control.ResourceBrowserType.SaveFile) { //this.isSaveFile = true; //if (item != null && !item.IsFile) //{ //} if (item == null || item.IsFile) { this.isSaveFile = true; } else { this.PART_TextBox.Text = item.FullPath; this.isSaveFile = false; } } if (item != null && item.IsFile) { this.isMissFileNameTextChanged = true; this.PART_FileName.Text = item.Token; this.isMissFileNameTextChanged = false; } }
/// <summary> /// 跳过root的FullPath查找路径节点 /// </summary> /// <param name="root">根</param> /// <param name="path">要查找的路径</param> /// <returns></returns> public static ResourceBrowserItem FindItemEx(ResourceBrowserItem root, string path) { if (root == null || string.IsNullOrWhiteSpace(path)) { return(null); } if (root.FullPath.ToLower().Equals(path.ToLower())) { return(root); } if (root.FullPath.Length > path.Length) { return(null); } string[] tokens = path.ToLower().Replace(root.FullPath.ToLower(), string.Empty).Split(new string[] { "/", "\\" }, StringSplitOptions.RemoveEmptyEntries); ResourceBrowserItem result = null; if (root.Items == null) { return(null); } foreach (ResourceBrowserItem item in root.Items) { result = _FindItem(item, 0, tokens); if (result != null) { return(result); } } return(null); }
/// <summary> /// 是否是逻辑根节点下边的节点 /// </summary> /// <param name="root">查询开始节点</param> /// <param name="item">要查询的节点</param> /// <returns></returns> public static bool IsLogicRootChildrenItem(IEnumerable root, ResourceBrowserItem item) { ResourceBrowserItem parent = item.Parent; List <ResourceBrowserItem> list = new List <ResourceBrowserItem>(); foreach (ResourceBrowserItem i in root) { if (i.IsLogicRoot) { list.Add(i); } } while (parent != null || list.Contains(parent)) { parent = parent.Parent; } if (parent == null) { return(false); } else { return(true); } }
/// <summary> /// 创建逻辑跟路径下的文件夹 /// </summary> /// <param name="temp_text">要创建文件夹的父目录信息</param> /// <param name="floderPath">要创建的目录完整路径</param> /// <param name="selected">当前树选中的节点</param> private void PART_CreateFloder_Click_LogicRoot(string temp_text, string floderPath, ResourceBrowserItem selected) { ResourceBrowserItem parent = ResourceBrowserHelper.FindItem(this.PART_Tree.ItemsSource, temp_text); if (parent != null) { if (parent.Items == null) { this.PART_Tree.Expand(parent); ResourceBrowserItem item = ResourceBrowserHelper.FindItem(this.PART_Tree.ItemsSource, floderPath); if (ResourceBrowserHelper.IsParent(selected, item)) { this.PART_Tree.SetSelectedValue(item); } } else { ResourceBrowserItem item = new ResourceBrowserItem(floderPath, false); parent.Items.Add(item); this.PART_Tree.Expand(parent); item.Parent = parent; if (ResourceBrowserHelper.IsParent(selected, item)) { this.PART_Tree.SetSelectedValue(item); } } } }
/// <summary> /// item1 是否是 item2 的父亲 /// </summary> /// <param name="item1">要判断的节点1</param> /// <param name="item2">要判断的节点2</param> /// <returns></returns> public static bool IsParent(ResourceBrowserItem item1, ResourceBrowserItem item2) { if (item1 == null || item2 == null) { return(false); } if (item1 == item2) { return(true); } ResourceBrowserItem parent = item2.Parent; while (parent != null) { if (parent == item1) { return(true); } parent = parent.Parent; } return(false); }
/// <summary> /// 初始化 /// </summary> private void Init() { ObservableCollection <ResourceBrowserItem> items = new ObservableCollection <ResourceBrowserItem>(); system = System.IO.Path.GetPathRoot(System.Environment.GetEnvironmentVariable("windir")); currentExe = System.IO.Path.GetPathRoot(AppDomain.CurrentDomain.BaseDirectory); desktop = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory); if (this.DefaultDirectoryPath != null) { foreach (string path in this.DefaultDirectoryPath) { ResourceBrowserItem i = new ResourceBrowserItem(path, false); items.Add(i); } } if (this.IsShowDesktop) { ResourceBrowserItem i = new ResourceBrowserItem(desktop, false, null, "桌面"); items.Add(i); } DriveInfo[] allDrives = DriveInfo.GetDrives(); foreach (DriveInfo drive in allDrives) { if (drive.IsReady && (drive.DriveType == DriveType.Fixed || drive.DriveType == DriveType.Removable)) { if (this.IsShieldSystemDrive && drive.Name.Equals(system)) { continue; } if (this.IsShieldCurrentApplicationDrive && drive.Name.Equals(currentExe)) { continue; } ResourceBrowserItem i = new ResourceBrowserItem(drive.RootDirectory.FullName, false, ResourceBrowser.DriverIcon); i.IsLogicRoot = true; if (drive.VolumeLabel.IsNullOrEmptyOrWhiteSpace()) { i.Name = "本地磁盘(" + drive.Name + ")"; } else { i.Name = drive.VolumeLabel + "(" + drive.Name + ")"; } items.Add(i); } } this.PART_Tree.ItemsSource = items; }
/// <summary> /// 获取文件夹下的所有文件 /// </summary> /// <param name="directoryPath">路径</param> /// <param name="filter">筛选条件</param> /// <returns></returns> public static ObservableCollection <ResourceBrowserItem> GetFiles(string directoryPath, List <ResourceBrowserFilterItem> filter) { if (directoryPath.IsNullOrEmptyOrWhiteSpace()) { return(null); } ObservableCollection <ResourceBrowserItem> items = new ObservableCollection <ResourceBrowserItem>(); DirectoryInfo info = new DirectoryInfo(directoryPath); // 获取所有文件 try { if (filter == null || filter.Count == 0) { foreach (FileInfo fi in info.GetFiles()) { try { ResourceBrowserItem i = new ResourceBrowserItem(fi.FullName, true); items.Add(i); } catch { } } } else { foreach (ResourceBrowserFilterItem f in filter) { foreach (string f_str in f.Filters) { foreach (FileInfo fi in info.GetFiles(f_str)) { try { ResourceBrowserItem i = new ResourceBrowserItem(fi.FullName, true); items.Add(i); } catch { } } } } } } catch { } return(items); }
/// <summary> /// 查找某个节点的根节点 /// </summary> /// <param name="item">要查找的节点</param> /// <returns></returns> public static ResourceBrowserItem FindRoot(ResourceBrowserItem item) { if (item.Parent == null) { return(item); } ResourceBrowserItem temp = item.Parent; while (temp.Parent != null) { temp = temp.Parent; } return(temp); }
/// <summary> /// 树选择改变 /// </summary> private void PART_Tree_OnSelectedChanged(object sender, DevExpress.Xpf.Grid.SelectedItemChangedEventArgs e) { ResourceBrowserItem item = this.PART_Tree.GetSelectedValue() as ResourceBrowserItem; if (item == null) { this.PART_CreateFloder.IsEnabled = false; return; } this.PART_CreateFloder.IsEnabled = true; this.DirectoryPath = item.FullPath; if (this.PART_TextBox != null) { this.PART_TextBox.Text = item.FullPath; } }
/// <summary> /// 根据提供的路径查找 /// </summary> /// <param name="root">根</param> /// <param name="path">要查找的路径</param> /// <returns></returns> public static ResourceBrowserItem FindItem(IEnumerable root, string path) { if (string.IsNullOrWhiteSpace(path)) { return(null); } string[] tokens = path.Split(new string[] { "/", "\\" }, StringSplitOptions.RemoveEmptyEntries); ResourceBrowserItem result = null; foreach (ResourceBrowserItem item in root) { result = _FindItem(item, 0, tokens); if (result != null) { return(result); } } return(null); }
public System.Collections.IEnumerable SelectChildren(object item) { ResourceBrowserItem i = item as ResourceBrowserItem; if (i == null || i.IsFile) { return(null); } if (i.Items == null) { i.Items = ResourceBrowserHelper.GetDirectorys(i.FullPath); if (i.Items == null) { return(null); } foreach (ResourceBrowserItem v in i.Items) { v.Parent = i; } } return(i.Items); }
/// <summary> /// 点击向上按钮 /// </summary> private void PART_Up_Click(object sender, RoutedEventArgs e) { if (this.PART_TextBox.Text.IsNullOrEmptyOrWhiteSpace()) { return; } string path = System.IO.Path.GetDirectoryName(this.PART_TextBox.Text); if (path.IsNullOrEmptyOrWhiteSpace()) { return; } ResourceBrowserItem selected = this.PART_Tree.GetSelectedValue() as ResourceBrowserItem; if (selected == null) { return; } ResourceBrowserItem root = ResourceBrowserHelper.FindRoot(selected); ResourceBrowserItem item = ResourceBrowserHelper.FindItemEx(root, path); if (item == null) { this.DirectoryPath = path; this.PART_TextBox.Text = path; } else { this.PART_Tree.SetSelectedValue(item); this.PART_TextBox.Text = item.FullPath; this.DirectoryPath = item.FullPath; } }
/// <summary> /// 新建文件夹 /// </summary> private void PART_CreateFloder_Click(object sender, RoutedEventArgs e) { if (this.PART_TextBox == null || this.PART_TextBox.Text.IsNullOrEmptyOrWhiteSpace() || !System.IO.Directory.Exists(this.PART_TextBox.Text)) { return; } string result = string.Empty; if (!XDD.Control.XlyMessageBox.ShowInputEx("请输入文件夹名", "新建文件夹", ref result, so => { var mbi = so as XlyMessageBoxInput; var s = mbi.InputText; if (s.Length > mbi.MaxLength) { XDD.Control.XlyMessageBox.ShowInfo(string.Format("文件夹名长度不能大于{0}个字符", mbi.MaxLength)); return(false); } if (s.IsNullOrEmptyOrWhiteSpace()) { XDD.Control.XlyMessageBox.ShowInfo("请输入文件夹名"); return(false); } bool isInvalid = (from c in s.ToCharArray() from t in System.IO.Path.GetInvalidFileNameChars() where c == t select c).Any(); if (isInvalid) { XDD.Control.XlyMessageBox.ShowInfo("文件夹名不能包含下列任何字符:/\\:*?\"<>|"); return(false); } string path = System.IO.Path.Combine(this.PART_TextBox.Text, s); if (System.IO.Directory.Exists(path)) { XDD.Control.XlyMessageBox.ShowInfo("当前目录下文件夹 " + s + " 已经存在"); return(false); } return(true); })) { return; } string floderPath = System.IO.Path.Combine(this.PART_TextBox.Text, result); System.IO.Directory.CreateDirectory(floderPath); ResourceBrowserItem selected = this.PART_Tree.GetSelectedValue() as ResourceBrowserItem; string temp_text = this.PART_TextBox.Text; if (this.IsShowDesktop || this.DefaultDirectoryPath.IsValid()) { PART_CreateFloder_Click_Default(temp_text, floderPath, selected); } PART_CreateFloder_Click_LogicRoot(temp_text, floderPath, selected); this.Refresh_Grid(); }
/// <summary> /// 执行确定按钮 /// </summary> private void _DoEnter() { if (this.ResourceBrowserType == Control.ResourceBrowserType.OpenDirectory) { if (this.OnOpen != null) { ResourceBrowserItem item = this.PART_Tree.GetSelectedValue() as ResourceBrowserItem; if (item == null) { return; } this._DoOpen(item.FullPath); } } else if (this.ResourceBrowserType == Control.ResourceBrowserType.OpenFile) { ResourceBrowserItem single = this.PART_Grid.GetSelectedValue() as ResourceBrowserItem; if (single == null) { return; } if (!this.IsMultipleSelect) { if (single.IsFile) { this._DoOpen(single.FullPath); return; } } IList il = this.PART_Grid.GetSelectedValues(); if (il == null || il.Count == 0) { return; } List <string> paths = new List <string>(); foreach (ResourceBrowserItem item in il) { if (item.IsFile) { paths.Add(item.FullPath); } } if (paths.Count > 0) { this._DoOpen(paths); return; } this.DirectoryPath = single.FullPath; this.PART_TextBox.Text = single.FullPath; } else if (this.ResourceBrowserType == Control.ResourceBrowserType.SaveFile) { if (this.isSaveFile) { if (this.PART_FileName.Text.IsNullOrEmptyOrWhiteSpace()) { return; } var isInvlid = (from c in this.PART_FileName.Text.ToCharArray() from t in System.IO.Path.GetInvalidFileNameChars() where c == t select c).Any(); if (isInvlid) { XDD.Control.XlyMessageBox.ShowInfo("文件名不能包含下列任何字符:/\\:*?\"<>|"); } string path = System.IO.Path.Combine(this.PART_TextBox.Text, this.PART_FileName.Text); if (string.IsNullOrWhiteSpace(path)) { return; } if (System.IO.File.Exists(path)) { if (!XLY.XDD.Control.XlyMessageBox.ShowQuestion("文件已经存在,是否覆盖?", "是", "否")) { return; } } this._DoOpen(path); } else { ResourceBrowserItem single = this.PART_Grid.GetSelectedValue() as ResourceBrowserItem; if (single == null) { return; } if (single.IsFile) { this._DoOpen(single.FullPath); } else { this.DirectoryPath = single.FullPath; this.PART_TextBox.Text = single.FullPath; } } } }