private static IModelGroup CreateNewGroup(IModelInspectorModel modelInspectorModel, string name)
        {
            ModelGroup Group = new ModelGroup(name);

            modelInspectorModel.Groups.Add(Group);
            return(Group);
        }
        public ModelInspectorWindowModel(IModelInspectorModel model)
        {
            this.model         = model;
            this.groupsAdapter = this.CreatePropertyAdapter(
                nameof(ModelInspectorWindowModel.Groups),
                () => model.Groups,
                group => new ModelGroupAdapter(this, group)
                );

            this.dragDropHandler = DragDropTarget.GetFactory()
                                   .AddTypeHandler <ModelNodeBaseAdapter>(
                DragDropEffects.Copy,
                DragDropEffect.Copy,
                (value, effect, info) =>
            {
                int Count            = this.model.Groups.Count;
                int NewIndex         = info.GetInfoOrDefault <DropIndex>(Count);
                IModelGroup NewGroup = new ModelGroup(value.Name);
                NewGroup.Models.Add(new ModelInfo(value.Model.Value, value.Name, false));
                this.model.Groups.Insert(NewIndex, NewGroup);
            }
                ).AddTypeHandler <ModelInfoAdapter>(
                DragDropEffects.Move | DragDropEffects.Copy,
                DragDropEffect.Move,
                (value, effect, info) =>
            {
                int NewIndex         = info.GetInfoOrDefault <DropIndex>(this.model.Groups.Count);
                IModelGroup NewGroup = new ModelGroup(value.Name);
                NewGroup.Models.Add(new ModelInfo(value.Model.Root.Value, value.Model.Name, effect == DragDropEffect.Move?value.Model.NonClosable:false));
                this.model.Groups.Insert(NewIndex, NewGroup);
            }
                ).AddTypeHandler <ModelGroupAdapter>(
                DragDropEffects.Move | DragDropEffects.Copy,
                DragDropEffect.Move,
                (value, effect, info) =>
            {
                int NewIndex     = info.GetInfoOrDefault <DropIndex>(this.model.Groups.Count);
                ModelGroup Group = new ModelGroup(value.Group.Name);
                value.Group.Models.ForEach(modelInfo => Group.Models.Add(new ModelInfo(modelInfo.Root.Value, modelInfo.Name, effect == DragDropEffect.Move?modelInfo.NonClosable:false)));
                this.model.Groups.Insert(NewIndex, Group);
            }
                ).Create();

            this.ZoomModel = new ZoomModel();
#if DEBUG
            System.Windows.Threading.Dispatcher.CurrentDispatcher.BeginInvoke(
                (System.Action) delegate
            {
                ModelGroup Group = new ModelGroup("Model Inspector");
                Group.Models.Add(new ModelInfo(this, "Model Inspector", true));
                model.Groups.Add(Group);
            });
#endif
        }
 public ModelInspector(IModelInspectorModel model, IModelInspectorWindow inspectorWindow)
 {
     this.model           = model;
     this.inspectorWindow = inspectorWindow;
 }