Beispiel #1
0
        /// <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);
        }
Beispiel #2
0
        /// <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);
        }
Beispiel #3
0
        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;
                }
            }
        }
Beispiel #4
0
        /// <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;
            }
        }
Beispiel #5
0
        /// <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);
        }
Beispiel #6
0
        /// <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);
            }
        }
Beispiel #7
0
        /// <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);
                    }
                }
            }
        }
Beispiel #8
0
        /// <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);
        }
Beispiel #9
0
        /// <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;
        }
Beispiel #10
0
        /// <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);
        }
Beispiel #11
0
        /// <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);
        }
Beispiel #12
0
        /// <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;
            }
        }
Beispiel #13
0
        /// <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);
        }
Beispiel #15
0
        /// <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;
            }
        }
Beispiel #16
0
        /// <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();
        }
Beispiel #17
0
        /// <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;
                    }
                }
            }
        }