private void OpenYamlEditorAction(object sender, EventArgs e) { string yaml = AampLibraryCSharp.YamlConverter.ToYaml(AampFile.aampFile); STForm form = new STForm(); form.Text = "YAML Text Editor"; var panel = new STPanel() { Dock = DockStyle.Fill, }; form.AddControl(panel); var editor = new TextEditor() { Dock = DockStyle.Fill, }; editor.FillEditor(yaml); editor.IsYAML = true; panel.Controls.Add(editor); if (form.ShowDialog() == DialogResult.OK) { } }
public ControlHandle() { Control = new BasePanel(); Control.Width = 400; FlowPanel = new FlowLayoutPanel(); FlowPanel.Dock = DockStyle.Fill; Control.ResumeLayout(false); Control.PerformLayout(); }
private void SetupEditor(object value, PropertyInfo[] properties) { string category = ""; int height = 23; int columnIndex = 0; List <Tuple <Control, int, int> > controls = new List <Tuple <Control, int, int> >(); //Go through each property and fill an entire row foreach (var property in properties) { //Get our custom attributes //Bind attribute for labels. Categories for dropdowns var bindableAttribute = property.GetCustomAttribute <BindGUI>(); var categoryAttribute = property.GetCustomAttribute <BindCategory>(); if (categoryAttribute != null) { category = categoryAttribute.Label; } //Check if a category is set if (category != string.Empty && !DropdownPanels.ContainsKey(category)) { //Make a dropdown and fill it in a flow layout var dropPanel = new DropdownPanel(); dropPanel.Height = 22; dropPanel.PanelName = category; DropdownPanels.Add(category, dropPanel); DropFlowPanel = new FlowLayoutPanel(); DropFlowPanel.Dock = DockStyle.Fill; dropPanel.AddControl(DropFlowPanel); FlowPanel.Controls.Add(dropPanel); } //Create bindable properties for GUI if (bindableAttribute != null) { if (bindableAttribute.Label != string.Empty) { controls.Add(Tuple.Create(CreateLabel(bindableAttribute.Label + ":"), columnIndex, 0)); columnIndex++; } var control = CreateBindedControl(value, property); if (control != null) { controls.Add(Tuple.Create(control, columnIndex, 0)); } } //Classes can also have custom control classes for more customization //These should be used if the control needs to be edited dynamically var customcontrol = CreateCustomControl(value, property); if (customcontrol != null) { controls.Add(Tuple.Create(customcontrol, columnIndex, 0)); } columnIndex++; } STPanel panel = new STPanel(); panel.Height = height; panel.Width = Control.Width; panel.Anchor = AnchorStyles.Left | AnchorStyles.Right; Table = CreateTableLayout(columnIndex + 1); Table.Dock = DockStyle.Fill; panel.Controls.Add(Table); foreach (var ctrl in controls) { Table.Controls.Add(ctrl.Item1, ctrl.Item2, ctrl.Item3); } if (DropdownPanels.ContainsKey(category)) { DropdownPanels[category].Height += panel.Height + 8; DropFlowPanel.Controls.Add(panel); } else { FlowPanel.Controls.Add(panel); } }
private void LoadColors(STColor[] colors, PTCL.Emitter.ColorType colorType, int type) { STPanel panel = new STPanel(); if (type == 0) { panel = stPanel3; } if (type == 1) { panel = stPanel4; } if (type == 2) { panel = stPanel5; } if (type == 3) { panel = stPanel6; } panel.Controls.Clear(); if (colorType == PTCL.Emitter.ColorType.Animated8Key) { Color8KeySlider colorSlider = new Color8KeySlider(); colorSlider.Dock = DockStyle.Fill; colorSlider.ColorSelected += ColorPanelSelected; panel.Controls.Add(colorSlider); colorSlider.IsAlpha = (type == 2 || type == 3); if (type == 0) { colorSlider.LoadColors(colors, (int)ActiveEmitter.Color0KeyCount); } if (type == 1) { colorSlider.LoadColors(colors, (int)ActiveEmitter.Color1KeyCount); } if (type == 2) { colorSlider.LoadColors(colors, (int)ActiveEmitter.Alpha0KeyCount); } if (type == 3) { colorSlider.LoadColors(colors, (int)ActiveEmitter.Alpha1KeyCount); } } else if (colorType == PTCL.Emitter.ColorType.Random) { ColorRandomPanel colorRandomPnl = new ColorRandomPanel(); colorRandomPnl.ColorSelected += ColorPanelSelected; panel.Controls.Add(colorRandomPnl); colorRandomPnl.IsAlpha = (type == 2 || type == 3); colorRandomPnl.LoadColors(colors); } else { ColorConstantPanel colorConstantPnl = new ColorConstantPanel(); colorConstantPnl.ColorSelected += ColorPanelSelected; panel.Controls.Add(colorConstantPnl); colorConstantPnl.IsAlpha = (type == 2 || type == 3); if (type == 0) { colorConstantPnl.LoadColor(ActiveEmitter.ConstantColor0); } if (type == 1) { colorConstantPnl.LoadColor(ActiveEmitter.ConstantColor1); } if (type == 2) { colorConstantPnl.LoadColor(ActiveEmitter.ConstantAlpha0); } if (type == 3) { colorConstantPnl.LoadColor(ActiveEmitter.ConstantAlpha1); } } }
private void SelectionChanged(ObjectTreeNode obj) { obj.OnClick(); bool tryUpdateViewport = false; if (Runtime.SelectedBoneIndex != -1) { tryUpdateViewport = true; Runtime.SelectedBoneIndex = -1; } if (obj.Tag is ArchiveFileInfo) { var fileInfo = (ArchiveFileInfo)obj.Tag; if (fileInfo.OpenFileFormatOnLoad) { fileInfo.FileFormat = fileInfo.OpenFile(); } if (fileInfo.FileFormat != null) { var fileNode = ObjectListWrapperLoader.OpenFormat(imgList, fileInfo.FileFormat); obj.Tag = fileInfo.FileFormat; foreach (var child in fileNode.Children) { obj.AddChild(child); } SelectionChanged(obj); return; } ArchiveFilePanel hexEditor = GetActiveEditor <ArchiveFilePanel>(); hexEditor.LoadFile(this, fileInfo); } else if (obj.Tag is STGenericTexture) { var tex = (STGenericTexture)obj.Tag; ImageEditorBase editor = GetActiveEditor <ImageEditorBase>(); editor.LoadProperties(tex.DisplayProperties); editor.LoadImage(tex); } else if (obj.Tag is IPropertyDisplay) { var property = (IPropertyDisplay)obj.Tag; STPropertyGrid editor = GetActiveEditor <STPropertyGrid>(); editor.LoadProperty(property.PropertyDisplay); } else if (obj.Tag is IEditorDisplay) { var property = (IEditorDisplay)obj.Tag; Console.WriteLine($"IEditorDisplay {property}"); var gui = GUIGenerator.Generate(property); gui.Dock = DockStyle.Fill; STPanel editor = GetActiveEditor <STPanel>(); editor.Controls.Clear(); editor.Controls.Add(gui); } else if (obj.Tag is System.IO.Stream) { var stream = (System.IO.Stream)obj.Tag; HexEditor hexEditor = GetActiveEditor <HexEditor>(); hexEditor.LoadData(stream); } else if (obj.Tag is IVideoFormat) { VideoPlayer editor = GetActiveEditor <VideoPlayer>(); editor.LoadVideoFile((IVideoFormat)obj.Tag); } else if (obj.Tag is STGenericMesh) { var mesh = (STGenericMesh)obj.Tag; mesh.SelectMesh?.Invoke(mesh, EventArgs.Empty); if (WorkspacePanel == null) { WorkspacePanel = CreateWorkspacePanel(); } WorkspacePanel workspace = GetActiveEditor <WorkspacePanel>(WorkspacePanel); var meshEditor = workspace.GetActiveEditor <MeshEditor>(); meshEditor.LoadMesh(mesh); workspace.UpdateViewport(); ObjectHiearchy.Focus(); } else if (obj.Tag is STGenericMaterial) { var mat = (STGenericMaterial)obj.Tag; if (WorkspacePanel == null) { WorkspacePanel = CreateWorkspacePanel(); } WorkspacePanel workspace = GetActiveEditor <WorkspacePanel>(WorkspacePanel); var materialEditor = workspace.GetActiveEditor <MaterialEditor>(); materialEditor.LoadMaterial(mat); workspace.UpdateViewport(); } else if (obj.Tag is IModelFormat) { if (WorkspacePanel == null) { WorkspacePanel = CreateWorkspacePanel(); } WorkspacePanel workspace = GetActiveEditor <WorkspacePanel>(WorkspacePanel); workspace.LoadFileFormat((IModelFormat)(obj.Tag)); workspace.UpdateViewport(); } else if (obj.Tag is IModelSceneFormat) { if (WorkspacePanel == null) { WorkspacePanel = CreateWorkspacePanel(); } WorkspacePanel workspace = GetActiveEditor <WorkspacePanel>(WorkspacePanel); workspace.LoadFileFormat((IModelSceneFormat)(obj.Tag)); workspace.UpdateViewport(); } else if (obj.Tag is STAnimation) { if (WorkspacePanel == null) { WorkspacePanel = CreateWorkspacePanel(); } WorkspacePanel workspace = GetActiveEditor <WorkspacePanel>(WorkspacePanel); workspace.LoadFileFormat((STAnimation)(obj.Tag)); workspace.UpdateViewport(); } else if (obj.Tag is STBone) { var bone = (STBone)obj.Tag; Runtime.SelectedBoneIndex = bone.Index; WorkspacePanel.UpdateViewport(); } if (tryUpdateViewport && WorkspacePanel != null) { WorkspacePanel.UpdateViewport(); } // else // GetActiveEditor<STPanel>(); }
/// <summary> /// 构造函数 /// </summary> public FrameControl(STPanel panel) { Panel = panel; AddEvents(); }