private void OnAddParameterButtonClicked(Button button) { var window = (IVisjectSurfaceWindow)Values[0]; var newParameterTypes = window.NewParameterTypes; // Show context menu with list of parameter types to add var cm = new ItemsListContextMenu(180); foreach (var newParameterType in newParameterTypes) { var name = newParameterType.Type != null?window.VisjectSurface.GetTypeName(newParameterType) : newParameterType.Name; var item = new ItemsListContextMenu.Item(name, newParameterType) { TooltipText = newParameterType.TypeName, }; var attributes = newParameterType.GetAttributes(false); var tooltipAttribute = (TooltipAttribute)attributes.FirstOrDefault(x => x is TooltipAttribute); if (tooltipAttribute != null) { item.TooltipText += '\n'; item.TooltipText += tooltipAttribute.Text; } cm.AddItem(item); } cm.ItemClicked += OnAddParameterItemClicked; cm.SortChildren(); cm.Show(button.Parent, button.BottomLeft); }
private void PickBone(Button button, Action <string> action, bool showOnlyExisting) { // Show context menu with list of bones to pick var cm = new ItemsListContextMenu(280); var ragdoll = (Ragdoll)Values[0]; var bodies = ragdoll.Children.Where(x => x is RigidBody && x.IsActive); var animatedModel = (AnimatedModel)ragdoll.Parent; animatedModel.SkinnedModel.WaitForLoaded(); var nodes = animatedModel.SkinnedModel.Nodes; var bones = animatedModel.SkinnedModel.Bones; foreach (var bone in bones) { var node = nodes[bone.NodeIndex]; if (showOnlyExisting && !bodies.Any(x => x.Name == node.Name)) { continue; } string prefix = string.Empty, tooltip = node.Name; var boneParentIndex = bone.ParentIndex; while (boneParentIndex != -1) { prefix += " "; tooltip = nodes[bones[boneParentIndex].NodeIndex].Name + " > " + tooltip; boneParentIndex = bones[boneParentIndex].ParentIndex; } var item = new ItemsListContextMenu.Item { Name = prefix + node.Name, TooltipText = tooltip, Tag = node.Name, }; if (!showOnlyExisting && !bodies.Any(x => x.Name == node.Name)) { item.TintColor = new Color(1, 0.8f, 0.8f, 0.6f); } cm.AddItem(item); } cm.ItemClicked += item => action((string)item.Tag); cm.SortChildren(); cm.Show(button.Parent, button.BottomLeft); }
private void OnAddParameterItemClicked(ItemsListContextMenu.Item item) { var type = (ScriptType)item.Tag; var window = (IVisjectSurfaceWindow)Values[0]; var asset = window?.VisjectAsset; if (asset == null || !asset.IsLoaded) { return; } var action = new AddRemoveParamAction { Window = window, IsAdd = true, Name = StringUtils.IncrementNameNumber("New parameter", x => OnParameterRenameValidate(null, x)), Type = type, Index = window.VisjectSurface.Parameters.Count, }; window.VisjectSurface.Undo.AddAction(action); action.Do(); }
private void AddScriptButtonOnClicked(Button button) { var scripts = Editor.Instance.CodeEditing.Scripts.Get(); if (scripts.Count == 0) { // No scripts var cm1 = new ContextMenu(); cm1.AddButton("No scripts in project"); cm1.Show(this, button.BottomLeft); return; } // Show context menu with list of scripts to add var cm = new ItemsListContextMenu(180); for (int i = 0; i < scripts.Count; i++) { var scriptType = scripts[i]; var item = new ItemsListContextMenu.Item(scriptType.Name, scriptType) { TooltipText = scriptType.TypeName, }; var attributes = scriptType.GetAttributes(false); var tooltipAttribute = (TooltipAttribute)attributes.FirstOrDefault(x => x is TooltipAttribute); if (tooltipAttribute != null) { item.TooltipText += '\n'; item.TooltipText += tooltipAttribute.Text; } cm.AddItem(item); } cm.ItemClicked += item => AddScript((ScriptType)item.Tag); cm.SortChildren(); cm.Show(this, button.BottomLeft); }