Beispiel #1
0
        private void OnChanged(RxListChange <object> changes)
        {
            lock (locker)
            {
                if (changeMode == DbChangeMode.Load)
                {
                    return;
                }

                changeMode = DbChangeMode.Save;
                try
                {
                    foreach (var added in changes.Added)
                    {
                        for (var i = ItemNodes.Count - 1; i >= added.Index; i--)
                        {
                            ItemNodes[i].Directory.MoveTo(Path.Combine(Directory.FullName, i.ToString()));
                        }
                        ItemNodes.Insert(added.Index, new DbObjectNode(Database, (IRxObject)added.Value, new DirectoryInfo(Path.Combine(Directory.FullName, added.Value.ToString()))));
                    }
                }
                finally
                {
                    changeMode = DbChangeMode.None;
                }
            }
        }
Beispiel #2
0
        protected override void OnFileSystemChanged(FileSystemEventArgs args)
        {
            base.OnFileSystemChanged(args);

            lock (locker)
            {
                changeMode = DbChangeMode.Load;
                try
                {
                    if (args.FullPath != Directory.FullName)
                    {
                        var relativePath = args.FullPath.Substring(Directory.FullName.Length).TrimStart(Path.DirectorySeparatorChar);
                        var parts        = relativePath.Split(Path.DirectorySeparatorChar);
                        if (parts.Length == 1)
                        {
                            switch (args.ChangeType)
                            {
                            case WatcherChangeTypes.Created:
                                int index;
                                if (int.TryParse(relativePath, out index))
                                {
                                    if (index >= ItemNodes.Count || ItemNodes[index] == null)
                                    {
                                        var obj  = (IRxObject)Activator.CreateInstance(MetaData.ElementType);
                                        var node = new DbObjectNode(Database, obj, new DirectoryInfo(Path.Combine(Directory.FullName, index.ToString())));
                                        while (index > ItemNodes.Count)
                                        {
                                            ItemNodes.Add(null);
                                        }
                                        while (index > List.Count)
                                        {
                                            List.Add(null);
                                        }
                                        if (index < ItemNodes.Count)
                                        {
                                            ItemNodes[index] = node;
                                        }
                                        else
                                        {
                                            ItemNodes.Add(node);
                                        }
                                        if (index < List.Count)
                                        {
                                            List[index] = obj;
                                        }
                                        else
                                        {
                                            List.Add(obj);
                                        }
                                    }
                                }
                                break;
                            }
                        }
                    }
                }
                finally
                {
                    changeMode = DbChangeMode.None;
                }
            }
        }