Refactor Editor Windows layout serialization of splitter values to prevent invalid state when loading windows
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
// Copyright (c) 2012-2022 Wojciech Figat. All rights reserved.
|
||||
|
||||
using System.Xml;
|
||||
using System.Globalization;
|
||||
using FlaxEngine;
|
||||
using FlaxEngine.Assertions;
|
||||
using FlaxEngine.GUI;
|
||||
@@ -423,6 +424,29 @@ namespace FlaxEditor.GUI.Docking
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Serializes splitter panel value into the saved layout.
|
||||
/// </summary>
|
||||
/// <param name="writer">The Xml writer.</param>
|
||||
/// <param name="name">The Xml attribute name to use for value.</param>
|
||||
/// <param name="splitter">The splitter panel.</param>
|
||||
protected void LayoutSerializeSplitter(XmlWriter writer, string name, SplitPanel splitter)
|
||||
{
|
||||
writer.WriteAttributeString(name, splitter.SplitterValue.ToString(CultureInfo.InvariantCulture));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Deserializes splitter panel value from the saved layout.
|
||||
/// </summary>
|
||||
/// <param name="node">The Xml document node.</param>
|
||||
/// <param name="name">The Xml attribute name to use for value.</param>
|
||||
/// <param name="splitter">The splitter panel.</param>
|
||||
protected void LayoutDeserializeSplitter(XmlElement node, string name, SplitPanel splitter)
|
||||
{
|
||||
if (float.TryParse(node.GetAttribute(name), CultureInfo.InvariantCulture, out float value) && value > 0.01f && value < 0.99f)
|
||||
splitter.SplitterValue = value;
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override void OnDestroy()
|
||||
{
|
||||
|
||||
@@ -1000,18 +1000,15 @@ namespace FlaxEditor.Surface
|
||||
/// <inheritdoc />
|
||||
public override void OnLayoutSerialize(XmlWriter writer)
|
||||
{
|
||||
writer.WriteAttributeString("Split1", _split1.SplitterValue.ToString());
|
||||
writer.WriteAttributeString("Split2", _split2.SplitterValue.ToString());
|
||||
LayoutSerializeSplitter(writer, "Split1", _split1);
|
||||
LayoutSerializeSplitter(writer, "Split2", _split2);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override void OnLayoutDeserialize(XmlElement node)
|
||||
{
|
||||
if (float.TryParse(node.GetAttribute("Split1"), out float value1))
|
||||
_split1.SplitterValue = value1;
|
||||
|
||||
if (float.TryParse(node.GetAttribute("Split2"), out value1))
|
||||
_split2.SplitterValue = value1;
|
||||
LayoutDeserializeSplitter(node, "Split1", _split1);
|
||||
LayoutDeserializeSplitter(node, "Split2", _split2);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
// Copyright (c) 2012-2022 Wojciech Figat. All rights reserved.
|
||||
|
||||
using System;
|
||||
using System.Globalization;
|
||||
using System.Reflection;
|
||||
using System.Xml;
|
||||
using FlaxEditor.Content;
|
||||
@@ -374,12 +375,12 @@ namespace FlaxEditor.Windows.Assets
|
||||
/// <inheritdoc />
|
||||
public override void OnLayoutSerialize(XmlWriter writer)
|
||||
{
|
||||
writer.WriteAttributeString("TimelineSplitter", _timeline.Splitter.SplitterValue.ToString());
|
||||
LayoutSerializeSplitter(writer, "TimelineSplitter", _timeline.Splitter);
|
||||
LayoutSerializeSplitter(writer, "Panel1Splitter", _panel1);
|
||||
if (_panel2 != null)
|
||||
LayoutSerializeSplitter(writer, "Panel2Splitter", _panel2);
|
||||
writer.WriteAttributeString("TimeShowMode", _timeline.TimeShowMode.ToString());
|
||||
writer.WriteAttributeString("ShowPreviewValues", _timeline.ShowPreviewValues.ToString());
|
||||
writer.WriteAttributeString("Panel1Splitter", _panel1.SplitterValue.ToString());
|
||||
if (_panel2 != null)
|
||||
writer.WriteAttributeString("Panel2Splitter", _panel2.SplitterValue.ToString());
|
||||
if (_properties.PreviewModel)
|
||||
writer.WriteAttributeString("PreviewModel", _properties.PreviewModel.ID.ToString());
|
||||
}
|
||||
@@ -387,18 +388,16 @@ namespace FlaxEditor.Windows.Assets
|
||||
/// <inheritdoc />
|
||||
public override void OnLayoutDeserialize(XmlElement node)
|
||||
{
|
||||
if (Guid.TryParse(node.GetAttribute("PreviewModel"), out Guid value4))
|
||||
_initialPreviewModel = FlaxEngine.Content.LoadAsync<SkinnedModel>(value4);
|
||||
if (float.TryParse(node.GetAttribute("TimelineSplitter"), out float value1))
|
||||
_timeline.Splitter.SplitterValue = value1;
|
||||
if (float.TryParse(node.GetAttribute("Panel1Splitter"), out value1))
|
||||
_panel1.SplitterValue = value1;
|
||||
if (float.TryParse(node.GetAttribute("Panel2Splitter"), out value1))
|
||||
LayoutDeserializeSplitter(node, "TimelineSplitter", _timeline.Splitter);
|
||||
LayoutDeserializeSplitter(node, "Panel1Splitter", _panel1);
|
||||
if (float.TryParse(node.GetAttribute("Panel2Splitter"), CultureInfo.InvariantCulture, out float value1) && value1 > 0.01f && value1 < 0.99f)
|
||||
_initialPanel2Splitter = value1;
|
||||
if (Enum.TryParse(node.GetAttribute("TimeShowMode"), out Timeline.TimeShowModes value2))
|
||||
_timeline.TimeShowMode = value2;
|
||||
if (bool.TryParse(node.GetAttribute("ShowPreviewValues"), out bool value3))
|
||||
_timeline.ShowPreviewValues = value3;
|
||||
if (Guid.TryParse(node.GetAttribute("PreviewModel"), out Guid value4))
|
||||
_initialPreviewModel = FlaxEngine.Content.LoadAsync<SkinnedModel>(value4);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
|
||||
@@ -282,14 +282,13 @@ namespace FlaxEditor.Windows.Assets
|
||||
/// <inheritdoc />
|
||||
public override void OnLayoutSerialize(XmlWriter writer)
|
||||
{
|
||||
writer.WriteAttributeString("Split", _split.SplitterValue.ToString());
|
||||
LayoutSerializeSplitter(writer, "Split", _split);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override void OnLayoutDeserialize(XmlElement node)
|
||||
{
|
||||
if (float.TryParse(node.GetAttribute("Split"), out float value1))
|
||||
_split.SplitterValue = value1;
|
||||
LayoutDeserializeSplitter(node, "Split", _split);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
|
||||
@@ -317,14 +317,13 @@ namespace FlaxEditor.Windows.Assets
|
||||
/// <inheritdoc />
|
||||
public override void OnLayoutSerialize(XmlWriter writer)
|
||||
{
|
||||
writer.WriteAttributeString("Split", _split.SplitterValue.ToString());
|
||||
LayoutSerializeSplitter(writer, "Split", _split);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override void OnLayoutDeserialize(XmlElement node)
|
||||
{
|
||||
if (float.TryParse(node.GetAttribute("Split"), out float value1))
|
||||
_split.SplitterValue = value1;
|
||||
LayoutDeserializeSplitter(node, "Split", _split);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
|
||||
@@ -206,14 +206,13 @@ namespace FlaxEditor.Windows.Assets
|
||||
/// <inheritdoc />
|
||||
public override void OnLayoutSerialize(XmlWriter writer)
|
||||
{
|
||||
writer.WriteAttributeString("Split", _split.SplitterValue.ToString());
|
||||
LayoutSerializeSplitter(writer, "Split", _split);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override void OnLayoutDeserialize(XmlElement node)
|
||||
{
|
||||
if (float.TryParse(node.GetAttribute("Split"), out float value1))
|
||||
_split.SplitterValue = value1;
|
||||
LayoutDeserializeSplitter(node, "Split", _split);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
|
||||
@@ -548,14 +548,13 @@ namespace FlaxEditor.Windows.Assets
|
||||
/// <inheritdoc />
|
||||
public override void OnLayoutSerialize(XmlWriter writer)
|
||||
{
|
||||
writer.WriteAttributeString("Split", _split.SplitterValue.ToString());
|
||||
LayoutSerializeSplitter(writer, "Split", _split);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override void OnLayoutDeserialize(XmlElement node)
|
||||
{
|
||||
if (float.TryParse(node.GetAttribute("Split"), out float value1))
|
||||
_split.SplitterValue = value1;
|
||||
LayoutDeserializeSplitter(node, "Split", _split);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
|
||||
@@ -187,14 +187,13 @@ namespace FlaxEditor.Windows.Assets
|
||||
/// <inheritdoc />
|
||||
public override void OnLayoutSerialize(XmlWriter writer)
|
||||
{
|
||||
writer.WriteAttributeString("Split", _split.SplitterValue.ToString());
|
||||
LayoutSerializeSplitter(writer, "Split", _split);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override void OnLayoutDeserialize(XmlElement node)
|
||||
{
|
||||
if (float.TryParse(node.GetAttribute("Split"), out float value1))
|
||||
_split.SplitterValue = value1;
|
||||
LayoutDeserializeSplitter(node, "Split", _split);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
|
||||
@@ -543,22 +543,17 @@ namespace FlaxEditor.Windows.Assets
|
||||
/// <inheritdoc />
|
||||
public override void OnLayoutSerialize(XmlWriter writer)
|
||||
{
|
||||
writer.WriteAttributeString("Split1", _split1.SplitterValue.ToString());
|
||||
writer.WriteAttributeString("Split2", _split2.SplitterValue.ToString());
|
||||
writer.WriteAttributeString("Split3", _timeline.Splitter.SplitterValue.ToString());
|
||||
LayoutSerializeSplitter(writer, "Split1", _split1);
|
||||
LayoutSerializeSplitter(writer, "Split2", _split2);
|
||||
LayoutSerializeSplitter(writer, "Split3", _timeline.Splitter);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override void OnLayoutDeserialize(XmlElement node)
|
||||
{
|
||||
if (float.TryParse(node.GetAttribute("Split1"), out float value1))
|
||||
_split1.SplitterValue = value1;
|
||||
|
||||
if (float.TryParse(node.GetAttribute("Split2"), out value1))
|
||||
_split2.SplitterValue = value1;
|
||||
|
||||
if (float.TryParse(node.GetAttribute("Split3"), out value1))
|
||||
_timeline.Splitter.SplitterValue = value1;
|
||||
LayoutDeserializeSplitter(node, "Split1", _split1);
|
||||
LayoutDeserializeSplitter(node, "Split2", _split2);
|
||||
LayoutDeserializeSplitter(node, "Split3", _timeline.Splitter);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
|
||||
@@ -483,8 +483,8 @@ namespace FlaxEditor.Windows.Assets
|
||||
/// <inheritdoc />
|
||||
public override void OnLayoutSerialize(XmlWriter writer)
|
||||
{
|
||||
writer.WriteAttributeString("Split1", _split1.SplitterValue.ToString());
|
||||
writer.WriteAttributeString("Split2", _split2.SplitterValue.ToString());
|
||||
LayoutSerializeSplitter(writer, "Split1", _split1);
|
||||
LayoutSerializeSplitter(writer, "Split2", _split2);
|
||||
writer.WriteAttributeString("LiveReload", LiveReload.ToString());
|
||||
writer.WriteAttributeString("GizmoMode", Viewport.TransformGizmo.ActiveMode.ToString());
|
||||
}
|
||||
@@ -492,15 +492,10 @@ namespace FlaxEditor.Windows.Assets
|
||||
/// <inheritdoc />
|
||||
public override void OnLayoutDeserialize(XmlElement node)
|
||||
{
|
||||
if (float.TryParse(node.GetAttribute("Split1"), out float value1))
|
||||
_split1.SplitterValue = value1;
|
||||
|
||||
if (float.TryParse(node.GetAttribute("Split2"), out value1))
|
||||
_split2.SplitterValue = value1;
|
||||
|
||||
LayoutDeserializeSplitter(node, "Split1", _split1);
|
||||
LayoutDeserializeSplitter(node, "Split2", _split2);
|
||||
if (bool.TryParse(node.GetAttribute("LiveReload"), out bool value2))
|
||||
LiveReload = value2;
|
||||
|
||||
if (Enum.TryParse(node.GetAttribute("GizmoMode"), out TransformGizmoBase.Mode value3))
|
||||
Viewport.TransformGizmo.ActiveMode = value3;
|
||||
}
|
||||
|
||||
@@ -989,7 +989,7 @@ namespace FlaxEditor.Windows.Assets
|
||||
/// <inheritdoc />
|
||||
public override void OnLayoutSerialize(XmlWriter writer)
|
||||
{
|
||||
writer.WriteAttributeString("TimelineSplitter", _timeline.Splitter.SplitterValue.ToString());
|
||||
LayoutSerializeSplitter(writer, "TimelineSplitter", _timeline.Splitter);
|
||||
writer.WriteAttributeString("TimeShowMode", _timeline.TimeShowMode.ToString());
|
||||
var id = _previewButton.Checked ? Guid.Empty : (_timeline.Player?.ID ?? _cachedPlayerId);
|
||||
writer.WriteAttributeString("SelectedPlayer", id.ToString());
|
||||
@@ -1000,18 +1000,13 @@ namespace FlaxEditor.Windows.Assets
|
||||
/// <inheritdoc />
|
||||
public override void OnLayoutDeserialize(XmlElement node)
|
||||
{
|
||||
if (float.TryParse(node.GetAttribute("TimelineSplitter"), out float value1))
|
||||
_timeline.Splitter.SplitterValue = value1;
|
||||
|
||||
LayoutDeserializeSplitter(node, "TimelineSplitter", _timeline.Splitter);
|
||||
if (Guid.TryParse(node.GetAttribute("SelectedPlayer"), out Guid value2))
|
||||
_cachedPlayerId = value2;
|
||||
|
||||
if (Enum.TryParse(node.GetAttribute("TimeShowMode"), out Timeline.TimeShowModes value3))
|
||||
_timeline.TimeShowMode = value3;
|
||||
|
||||
if (bool.TryParse(node.GetAttribute("ShowPreviewValues"), out bool value4))
|
||||
_timeline.ShowPreviewValues = value4;
|
||||
|
||||
if (bool.TryParse(node.GetAttribute("ShowSelected3dTrack"), out value4))
|
||||
_timeline.ShowSelected3dTrack = value4;
|
||||
}
|
||||
|
||||
@@ -304,14 +304,13 @@ namespace FlaxEditor.Windows.Assets
|
||||
/// <inheritdoc />
|
||||
public override void OnLayoutSerialize(XmlWriter writer)
|
||||
{
|
||||
writer.WriteAttributeString("Split", _split.SplitterValue.ToString());
|
||||
LayoutSerializeSplitter(writer, "Split", _split);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override void OnLayoutDeserialize(XmlElement node)
|
||||
{
|
||||
if (float.TryParse(node.GetAttribute("Split"), out float value1))
|
||||
_split.SplitterValue = value1;
|
||||
LayoutDeserializeSplitter(node, "Split", _split);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
|
||||
@@ -366,14 +366,13 @@ namespace FlaxEditor.Windows.Assets
|
||||
/// <inheritdoc />
|
||||
public override void OnLayoutSerialize(XmlWriter writer)
|
||||
{
|
||||
writer.WriteAttributeString("Split", _split.SplitterValue.ToString());
|
||||
LayoutSerializeSplitter(writer, "Split", _split);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override void OnLayoutDeserialize(XmlElement node)
|
||||
{
|
||||
if (float.TryParse(node.GetAttribute("Split"), out float value1))
|
||||
_split.SplitterValue = value1;
|
||||
LayoutDeserializeSplitter(node, "Split", _split);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
|
||||
@@ -245,14 +245,13 @@ namespace FlaxEditor.Windows.Assets
|
||||
/// <inheritdoc />
|
||||
public override void OnLayoutSerialize(XmlWriter writer)
|
||||
{
|
||||
writer.WriteAttributeString("Split", _split.SplitterValue.ToString());
|
||||
LayoutSerializeSplitter(writer, "Split", _split);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override void OnLayoutDeserialize(XmlElement node)
|
||||
{
|
||||
if (float.TryParse(node.GetAttribute("Split"), out float value1))
|
||||
_split.SplitterValue = value1;
|
||||
LayoutDeserializeSplitter(node, "Split", _split);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
|
||||
@@ -1367,14 +1367,13 @@ namespace FlaxEditor.Windows.Assets
|
||||
/// <inheritdoc />
|
||||
public override void OnLayoutSerialize(XmlWriter writer)
|
||||
{
|
||||
writer.WriteAttributeString("Split", _split.SplitterValue.ToString());
|
||||
LayoutSerializeSplitter(writer, "Split", _split);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override void OnLayoutDeserialize(XmlElement node)
|
||||
{
|
||||
if (float.TryParse(node.GetAttribute("Split"), out float value1))
|
||||
_split.SplitterValue = value1;
|
||||
LayoutDeserializeSplitter(node, "Split", _split);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
using System.Xml;
|
||||
using FlaxEditor.Content;
|
||||
@@ -952,8 +953,8 @@ namespace FlaxEditor.Windows
|
||||
/// <inheritdoc />
|
||||
public override void OnLayoutSerialize(XmlWriter writer)
|
||||
{
|
||||
writer.WriteAttributeString("Split", _split.SplitterValue.ToString());
|
||||
writer.WriteAttributeString("Scale", _view.ViewScale.ToString());
|
||||
LayoutSerializeSplitter(writer, "Split", _split);
|
||||
writer.WriteAttributeString("Scale", _view.ViewScale.ToString(CultureInfo.InvariantCulture));
|
||||
writer.WriteAttributeString("ShowFileExtensions", _view.ShowFileExtensions.ToString());
|
||||
writer.WriteAttributeString("ViewType", _view.ViewType.ToString());
|
||||
}
|
||||
@@ -961,15 +962,11 @@ namespace FlaxEditor.Windows
|
||||
/// <inheritdoc />
|
||||
public override void OnLayoutDeserialize(XmlElement node)
|
||||
{
|
||||
if (float.TryParse(node.GetAttribute("Split"), out float value1))
|
||||
_split.SplitterValue = value1;
|
||||
|
||||
if (float.TryParse(node.GetAttribute("Scale"), out value1))
|
||||
LayoutDeserializeSplitter(node, "Split", _split);
|
||||
if (float.TryParse(node.GetAttribute("Scale"), CultureInfo.InvariantCulture, out var value1))
|
||||
_view.ViewScale = value1;
|
||||
|
||||
if (bool.TryParse(node.GetAttribute("ShowFileExtensions"), out bool value2))
|
||||
_view.ShowFileExtensions = value2;
|
||||
|
||||
if (Enum.TryParse(node.GetAttribute("ViewType"), out ContentViewType viewType))
|
||||
_view.ViewType = viewType;
|
||||
}
|
||||
|
||||
@@ -673,14 +673,13 @@ namespace FlaxEditor.Windows
|
||||
/// <inheritdoc />
|
||||
public override void OnLayoutSerialize(XmlWriter writer)
|
||||
{
|
||||
writer.WriteAttributeString("Split", _split.SplitterValue.ToString());
|
||||
LayoutSerializeSplitter(writer, "Split", _split);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override void OnLayoutDeserialize(XmlElement node)
|
||||
{
|
||||
if (float.TryParse(node.GetAttribute("Split"), out float value1))
|
||||
_split.SplitterValue = value1;
|
||||
LayoutDeserializeSplitter(node, "Split", _split);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
|
||||
Reference in New Issue
Block a user