internal void EditingFile_ItemRemoved(MotionItemBase item, MotionFolderItem parentFolder) { MotionItemBaseView view = DataToViewDict[item]; if (view.ParentItem != null) { view.ParentItem.ChildItemCollection.Remove(view); view.ParentItem = null; } //Remove from collection itemList.Remove(item); DataToViewDict.Remove(item); if (item.IsRoot) { MotionTreeView.ChildItemCollection.Remove(view); RootFolderView = null; } //Unregister events //어차피 삭제이후 사용되지 않으므로 참조가 어려운 이벤트는 생략한다. item.NameChanged -= view.Data_NameChanged; EditorContext.MarkUnsaved(); }
public MotionItem CreateMotionDefault(MotionFolderItem parentFolder = null, string name = null) { MotionItem motion = CreateMotionEmpty(parentFolder, name); MotionItem.CreateDefault(motion); return(motion); }
public void DuplicateSelectedMotion() { if (!IsSelectedItemCopyable) { return; } MotionItemBase latestNewItem = null; MotionFolderItem parentFolder = SelectedItemParent; foreach (MotionItemBaseView refItem in MotionTreeView.SelectedItemSet) { if (refItem.Type == MotionItemType.Motion) { MotionItem refMotionItem = (MotionItem)refItem.Data; //Create motion MotionItem newItem = EditingFile.CreateMotionEmpty(parentFolder); latestNewItem = newItem; //Copy points foreach (MotionPoint refPoint in refMotionItem.pointList) { MotionPoint point = new MotionPoint(); newItem.AddPoint(point); point.SetMainPoint(refPoint.MainPoint); for (int i = 0; i < refPoint.SubPoints.Length; ++i) { point.SetSubPoint(i, refPoint.SubPoints[i]); } } ((MotionItemView)DataToViewDict[newItem]).UpdatePreviewGraph(); //Set name const string CopyPostfix = "_Copy"; string name = refItem.Data.Name; for (; ;) { if (EditingFile.itemDict.ContainsKey(name)) { name += CopyPostfix; } else { break; } } newItem.SetName(name); } } if (latestNewItem != null) { MotionTreeView.SelectedItemSet.SetSelectedItem(DataToViewDict[latestNewItem]); } }
public MotionFile(bool createRootFolder = true) { itemDict = new Dictionary <string, MotionItemBase>(); if (createRootFolder) { rootFolder = new MotionFolderItem(this); rootFolder.SetName(RootFolderName); } }
public void RemoveItem(MotionItemBase item) { if (item.Type == MotionItemType.Folder) { //메세지 띄우기 MotionFolderItem folderItem = (MotionFolderItem)item; foreach (MotionItemBase childItem in folderItem.childList.ToList()) { RemoveItem(childItem); } } MotionFolderItem parentFolder = item.Parent; item.Parent.childList.Remove(item); itemDict.Remove(item.Name); ItemRemoved?.Invoke(item, parentFolder); }
public MotionItem CreateMotionEmpty(MotionFolderItem parentFolder = null, string name = null) { if (parentFolder == null) { parentFolder = rootFolder; } if (string.IsNullOrEmpty(name)) { name = GetNewName(MotionItemType.Motion); } MotionItem motion = new MotionItem(this); ItemCreated?.Invoke(motion, parentFolder); parentFolder.AddChild(motion); motion.SetName(name); return(motion); }
public MotionFolderItem CreateFolder(MotionFolderItem parentFolder = null, string name = null) { if (parentFolder == null) { parentFolder = rootFolder; } if (string.IsNullOrEmpty(name)) { name = GetNewName(MotionItemType.Folder); } MotionFolderItem folder = new MotionFolderItem(this); ItemCreated?.Invoke(folder, parentFolder); if (parentFolder != null) { parentFolder.AddChild(folder); } folder.SetName(name); return(folder); }
//Events internal void EditingFile_ItemCreated(MotionItemBase item, MotionFolderItem parentFolder) { if (item == null) { return; } MotionItemBaseView view = null; switch (item.Type) { case MotionItemType.Motion: MotionItemView motionView = new MotionItemView(EditorContext, (MotionItem)item); view = motionView; motionView.UpdatePreviewGraph(); break; case MotionItemType.Folder: MotionFolderItemView folderView = new MotionFolderItemView(EditorContext, (MotionFolderItem)item); view = folderView; if (parentFolder == null) { //Create root folderView.SetRootFolder(); RootFolderView = folderView; MotionTreeView.ChildItemCollection.Add(folderView); MotionTreeView.ManualRootFolder = folderView; } //Register events MotionFolderItem folderItem = (MotionFolderItem)item; folderItem.ChildInserted += Data_ChildInserted; folderItem.ChildRemoved += Data_ChildRemoved; void Data_ChildInserted(int index, MotionItemBase childItem) { MotionItemBaseView childItemView = DataToViewDict[childItem]; folderView.ChildItemCollection.Insert(index, childItemView); } void Data_ChildRemoved(MotionItemBase childItem) { MotionItemBaseView childItemView = DataToViewDict[childItem]; folderView.ChildItemCollection.Remove(childItemView); } break; } if (parentFolder != null) { view.ParentItem = (MotionFolderItemView)DataToViewDict[parentFolder]; } //Register events item.NameChanged += view.Data_NameChanged; //Add to collection itemList.Add(item); DataToViewDict.Add(item, view); EditorContext.MarkUnsaved(); }
private void CreateFolderButton_OnClick() { MotionFolderItem item = EditingFile.CreateFolder(SelectedItemParent); MotionTreeView.SelectedItemSet.SetSelectedItem((MotionFolderItemView)DataToViewDict[item]); }
public void LoadFromJson(JObject jRoot) { //MotionTree JObject jRootFolder = jRoot[RootFolderName] as JObject; LoadItemRecursive(jRootFolder, null); void LoadItemRecursive(JToken jItem, MotionFolderItem parent) { JToken jType = jItem["Type"]; string typeText = jType != null?jType.ToString() : null; string name = (jItem.Parent as JProperty).Name; if (typeText == "Motion") { LoadMotion(parent, jItem, name); } else { LoadFolder(parent, jItem, name); } } void LoadMotion(MotionFolderItem parent, JToken jItem, string name) { JObject jData = jItem["Data"] as JObject; JArray jPoints = jData["Point"] as JArray; MotionItem motion = CreateMotionEmpty(parent); motion.SetName(name); foreach (JToken jPointToken in jPoints) { JArray jPoint = jPointToken as JArray; MotionPoint point = new MotionPoint( PVector2.Parse(jPoint[0].ToObject <string>()), PVector2.Parse(jPoint[1].ToObject <string>()), PVector2.Parse(jPoint[2].ToObject <string>())); motion.AddPoint(point); } } void LoadFolder(MotionFolderItem parent, JToken jItem, string name) { MotionFolderItem folder = CreateFolder(parent); if (parent == null) { rootFolder = folder; } else { folder.SetName(name); } JObject jItems = jItem["Items"] as JObject; foreach (JToken jChild in jItems.Children()) { JProperty jChildProp = jChild as JProperty; LoadItemRecursive(jChildProp.Value, folder); } } }
public MotionFolderItemView(MotionEditorContext editorContext, MotionFolderItem data) : base(editorContext, MotionItemType.Folder) { ContentPanel.Children.Remove(MotionContent); Data = data; }