Add more layout editor features

Add pane deleting via right clicking them.
Added pane overlap select from right click (displays all panes at position of the mouse).
Add option to hide and show all hidden panes from right click menu.
This commit is contained in:
KillzXGaming 2019-10-05 18:37:28 -04:00
parent 45a2466e86
commit 00ba993fa1
10 changed files with 222 additions and 4 deletions

View file

@ -36,6 +36,7 @@ namespace BrawlboxHelper
{
CLR0Node clr0 = NodeFactory.FromFile(null, FileName) as CLR0Node;
ResU.ShaderParamAnim fshu = new ResU.ShaderParamAnim();
fshu.FrameCount = clr0.FrameCount;
fshu.Name = clr0.Name;
@ -48,7 +49,10 @@ namespace BrawlboxHelper
//Set mat anims and then calculate data after
foreach (var entry in clr0.Children)
{
if (entry is CLR0MaterialNode)
fshu.ShaderParamMatAnims.Add(Clr0Entry2ShaderMatAnim(clr0, (CLR0MaterialNode)entry));
}
fshu.BakedSize = CalculateBakeSize(fshu);
fshu.BindIndices = SetIndices(fshu);

Binary file not shown.

Binary file not shown.

View file

@ -1264,6 +1264,35 @@ namespace LayoutBXLYT
if (!PaneLookup.ContainsKey(pane.Name))
PaneLookup.Add(pane.Name, pane);
}
public void AddPane(BasePane pane, BasePane parent)
{
if (parent == null) return;
if (!PaneLookup.ContainsKey(pane.Name))
PaneLookup.Add(pane.Name, pane);
parent.Childern.Add(pane);
parent.NodeWrapper.Nodes.Add(pane.NodeWrapper);
}
public void RemovePanes(List<BasePane> panes)
{
for (int i = 0; i < panes.Count; i++)
{
if (PaneLookup.ContainsKey(panes[i].Name))
PaneLookup.Remove(panes[i].Name);
if (panes[i].Parent == null)
continue;
var parent = panes[i].Parent;
parent.Childern.Remove(panes[i]);
parent.NodeWrapper.Nodes.Remove(panes[i].NodeWrapper);
}
}
}
public class BxlytMaterial

View file

@ -440,6 +440,11 @@ namespace LayoutBXLYT
dockContent.Show(dockPanel1, DockState.DockBottom);
}
public void UpdateHiearchyTree()
{
LayoutHierarchy?.UpdateTree();
}
private void OnAnimationPlaying(object sender, EventArgs e)
{
if (LayoutAnimEditor != null)

View file

@ -83,6 +83,11 @@ namespace LayoutBXLYT
treeView1.Refresh();
}
public void UpdateTree()
{
treeView1.Refresh();
}
public void Reset()
{
treeView1.Nodes.Clear();

View file

@ -38,6 +38,58 @@ namespace LayoutBXLYT
IRevertAction Revert();
}
public class UndoActionPaneHide : IRevertAction
{
private bool hidePane = true;
public List<BasePane> targetPanes = new List<BasePane>();
public UndoActionPaneHide(List<BasePane> panes, bool hide = true)
{
targetPanes = panes;
hidePane = hide;
foreach (var pane in targetPanes)
pane.DisplayInEditor = !hidePane;
}
public IRevertAction Revert()
{
foreach (var pane in targetPanes)
pane.DisplayInEditor = hidePane;
return this;
}
}
public class UndoActionPaneDelete : IRevertAction
{
public BxlytHeader layoutFile;
public List<PaneInfo> targetPanes = new List<PaneInfo>();
public UndoActionPaneDelete(List<BasePane> panes, BxlytHeader header)
{
layoutFile = header;
for (int i = 0; i < panes.Count; i++)
targetPanes.Add(new PaneInfo(panes[i]));
}
public IRevertAction Revert()
{
for (int i = 0; i < targetPanes.Count; i++)
layoutFile.AddPane(targetPanes[i].Pane, targetPanes[i].Parent);
return this;
}
public class PaneInfo
{
public BasePane Parent;
public BasePane Pane;
public PaneInfo(BasePane pane)
{
Pane = pane;
Parent = pane.Parent;
}
}
}
public class UndoActionTransform : IRevertAction
{
public Vector3F Translate;

View file

@ -28,7 +28,9 @@
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.glControl1 = new OpenTK.GLControl();
this.stContextMenuStrip1 = new Toolbox.Library.Forms.STContextMenuStrip(this.components);
this.SuspendLayout();
//
// glControl1
@ -48,6 +50,11 @@
this.glControl1.MouseUp += new System.Windows.Forms.MouseEventHandler(this.glControl1_MouseUp);
this.glControl1.Resize += new System.EventHandler(this.glControl1_Resize);
//
// stContextMenuStrip1
//
this.stContextMenuStrip1.Name = "stContextMenuStrip1";
this.stContextMenuStrip1.Size = new System.Drawing.Size(61, 4);
//
// LayoutViewer
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
@ -62,5 +69,6 @@
#endregion
private OpenTK.GLControl glControl1;
private Toolbox.Library.Forms.STContextMenuStrip stContextMenuStrip1;
}
}

View file

@ -9,6 +9,7 @@ using System.Threading.Tasks;
using System.Windows.Forms;
using OpenTK.Graphics.OpenGL;
using OpenTK;
using Toolbox.Library.Forms;
using Toolbox.Library;
using Toolbox.Library.Rendering;
using Toolbox.Library.IO;
@ -716,19 +717,103 @@ namespace LayoutBXLYT
ParentEditor.UpdateHiearchyNodeSelection(hitPane);
isPicked = true;
}
else if (!hasEdgeHit)
} //Check edge hit and control key (multi selecting panes)
else if (!hasEdgeHit && Control.ModifierKeys != Keys.Control)
SelectedPanes.Clear();
pickOriginMouse = e.Location;
RenderScene();
}
else if (e.Button == MouseButtons.Right)
{
RenderEditor();
var coords = convertScreenToWorldCoords(e.Location.X, e.Location.Y);
GL.PopMatrix();
//Add a content menu
var selectOverlapping = new STToolStripItem("Select Overlapping");
var createPanes = new STToolStripItem("Create Pane");
createPanes.DropDownItems.Add(new STToolStripItem("Null Pane"));
createPanes.DropDownItems.Add(new STToolStripItem("Picture Pane"));
createPanes.DropDownItems.Add(new STToolStripItem("Text Box Pane "));
createPanes.DropDownItems.Add(new STToolStripItem("Window Pane"));
createPanes.DropDownItems.Add(new STToolStripItem("Boundry Pane"));
var hitPanes = GetHitPanes(LayoutFile.RootPane, coords.X, coords.Y, new List<BasePane>());
for (int i = 0; i < hitPanes.Count; i++)
selectOverlapping.DropDownItems.Add(
new STToolStripItem(hitPanes[i].Name, SelectOverlappingAction));
stContextMenuStrip1.Items.Clear();
stContextMenuStrip1.Items.Add(createPanes);
stContextMenuStrip1.Items.Add(selectOverlapping);
if (SelectedPanes.Count > 0)
{
stContextMenuStrip1.Items.Add(new STToolStripSeparator());
stContextMenuStrip1.Items.Add(new STToolStripItem("Edit Group"));
stContextMenuStrip1.Items.Add(new STToolStripItem("Delete Selected Panes",DeletePaneAction ));
stContextMenuStrip1.Items.Add(new STToolStripItem("Hide Selected Panes", HidePaneAction));
stContextMenuStrip1.Items.Add(new STToolStripItem("Show All Hidden Panes", ShowAllPaneAction));
}
stContextMenuStrip1.Show(Cursor.Position);
}
Console.WriteLine("SelectedPanes " + SelectedPanes.Count);
}
private void DeletePaneAction(object sender, EventArgs e) {
DeleteSelectedPanes();
}
private void HidePaneAction(object sender, EventArgs e) {
HideSelectedPanes();
}
private void ShowAllPaneAction(object sender, EventArgs e) {
ShowHiddenPanes();
}
private void HideSelectedPanes()
{
UndoManger.AddToUndo(new LayoutUndoManager.UndoActionPaneHide(SelectedPanes));
ParentEditor?.UpdateHiearchyTree();
glControl1.Invalidate();
}
private void ShowHiddenPanes()
{
UndoManger.AddToUndo(new LayoutUndoManager.UndoActionPaneHide(LayoutFile.PaneLookup.Values.ToList(), false));
ParentEditor?.UpdateHiearchyTree();
glControl1.Invalidate();
}
private void DeleteSelectedPanes()
{
UndoManger.AddToUndo(new LayoutUndoManager.UndoActionPaneDelete(SelectedPanes, LayoutFile));
LayoutFile.RemovePanes(SelectedPanes);
ParentEditor?.UpdateHiearchyTree();
glControl1.Invalidate();
}
private void SelectOverlappingAction(object sender, EventArgs e)
{
var toolMenu = sender as STToolStripItem;
if (toolMenu != null)
{
string name = toolMenu.Text;
SelectedPanes.Clear();
if (LayoutFile.PaneLookup.ContainsKey(name))
SelectedPanes.Add(LayoutFile.PaneLookup[name]);
glControl1.Invalidate();
}
}
private void SearchHit(BasePane pane, int X, int Y, ref BasePane SelectedPane)
{
bool isVisible = pane.Visible;
@ -750,6 +835,29 @@ namespace LayoutBXLYT
SearchHit(childPane, X, Y, ref SelectedPane);
}
private List<BasePane> GetHitPanes(BasePane pane, int X, int Y, List<BasePane> SelectedPanes)
{
bool isVisible = pane.Visible;
if (!Runtime.LayoutEditor.DisplayPicturePane && pane is IPicturePane)
isVisible = false;
if (!Runtime.LayoutEditor.DisplayWindowPane && pane is IWindowPane)
isVisible = false;
if (!Runtime.LayoutEditor.DisplayBoundryPane && pane is IBoundryPane)
isVisible = false;
if (!Runtime.LayoutEditor.DisplayTextPane && pane is ITextPane)
isVisible = false;
if (!Runtime.LayoutEditor.DisplayNullPane && pane.IsNullPane)
isVisible = false;
if (isVisible && pane.DisplayInEditor && pane.IsHit(X, Y) && pane.Name != "RootPane")
SelectedPanes.Add(pane);
foreach (var childPane in pane.Childern)
SelectedPanes = GetHitPanes(childPane, X, Y, SelectedPanes);
return SelectedPanes;
}
private PickAction SearchEdgePicking(BasePane pane, int X, int Y)
{
var transformed = pane.CreateRectangle().GetTransformedRectangle(pane.Parent, pane.Translate, pane.Scale);
@ -1023,6 +1131,10 @@ namespace LayoutBXLYT
ParentEditor.UpdateUndo();
glControl1.Invalidate();
}
else if (e.KeyCode == Keys.Delete)
{
DeleteSelectedPanes();
}
}
}
}

View file

@ -117,4 +117,7 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="stContextMenuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>