diff --git a/Content/UniversalEditor.Content.PlatformIndependent/Editors/Unreal/Package/ContextMenus.uexml b/Content/UniversalEditor.Content.PlatformIndependent/Editors/Unreal/Package/ContextMenus.uexml
index 46b4ee1d..d2c6c68e 100644
--- a/Content/UniversalEditor.Content.PlatformIndependent/Editors/Unreal/Package/ContextMenus.uexml
+++ b/Content/UniversalEditor.Content.PlatformIndependent/Editors/Unreal/Package/ContextMenus.uexml
@@ -4,17 +4,24 @@
-
+
+
+
+
diff --git a/Content/UniversalEditor.Content.PlatformIndependent/Editors/Unreal/Package/Dialogs/UnrealPackageEntryPropertiesDialog.glade b/Content/UniversalEditor.Content.PlatformIndependent/Editors/Unreal/Package/Dialogs/UnrealPackageEntryPropertiesDialog.glade
index e775f934..fa6c7623 100644
--- a/Content/UniversalEditor.Content.PlatformIndependent/Editors/Unreal/Package/Dialogs/UnrealPackageEntryPropertiesDialog.glade
+++ b/Content/UniversalEditor.Content.PlatformIndependent/Editors/Unreal/Package/Dialogs/UnrealPackageEntryPropertiesDialog.glade
@@ -24,12 +24,15 @@
False
end
-
-
+
gtk-cancel
True
True
@@ -114,7 +117,7 @@
-
+
True
False
Source data
diff --git a/Plugins.UserInterface/UniversalEditor.Plugins.UnrealEngine.UserInterface/Dialogs/Unreal/Package/UnrealPackageEntryPropertiesDialog.cs b/Plugins.UserInterface/UniversalEditor.Plugins.UnrealEngine.UserInterface/Dialogs/Unreal/Package/UnrealPackageEntryPropertiesDialog.cs
index 086b2a35..f87af4d9 100644
--- a/Plugins.UserInterface/UniversalEditor.Plugins.UnrealEngine.UserInterface/Dialogs/Unreal/Package/UnrealPackageEntryPropertiesDialog.cs
+++ b/Plugins.UserInterface/UniversalEditor.Plugins.UnrealEngine.UserInterface/Dialogs/Unreal/Package/UnrealPackageEntryPropertiesDialog.cs
@@ -22,6 +22,7 @@
using System;
using MBS.Framework.UserInterface;
using MBS.Framework.UserInterface.Controls;
+using MBS.Framework.UserInterface.Dialogs;
using UniversalEditor.ObjectModels.UnrealEngine;
namespace UniversalEditor.Plugins.UnrealEngine.UserInterface.Dialogs.Unreal.Package
@@ -35,7 +36,11 @@ namespace UniversalEditor.Plugins.UnrealEngine.UserInterface.Dialogs.Unreal.Pack
private TextBox txtObjectName;
private ComboBox cboClassName;
private ComboBox cboPackageName;
+
+ private Label lblSourceData;
private TextBox txtSourceData;
+
+ private Button cmdOK;
private Button cmdSourceDataBrowse;
private GroupBox fraFlags;
@@ -49,11 +54,16 @@ namespace UniversalEditor.Plugins.UnrealEngine.UserInterface.Dialogs.Unreal.Pack
{
base.OnCreated(e);
+ DefaultButton = cmdOK;
if (ImportTableEntry != null)
{
- txtObjectName.Text = ImportTableEntry.ObjectName.Name;
- cboClassName.Text = ImportTableEntry.ClassName.Name;
- cboPackageName.Text = ImportTableEntry.PackageName.Name;
+ txtObjectName.Text = ImportTableEntry.ObjectName?.Name;
+ cboClassName.Text = ImportTableEntry.ClassName?.Name;
+ cboPackageName.Text = ImportTableEntry.PackageName?.Name;
+
+ lblSourceData.Visible = false;
+ txtSourceData.Visible = false;
+ cmdSourceDataBrowse.Visible = false;
fraFlags.Visible = false;
@@ -65,6 +75,12 @@ namespace UniversalEditor.Plugins.UnrealEngine.UserInterface.Dialogs.Unreal.Pack
cboClassName.Text = ExportTableEntry.ObjectClass?.Name?.Name;
cboPackageName.Text = ExportTableEntry.ObjectParent?.Name?.Name;
+ lblSourceData.Visible = true;
+ txtSourceData.Visible = true;
+ cmdSourceDataBrowse.Visible = true;
+
+ txtSourceData.Text = String.Format("({0})", UniversalEditor.UserInterface.Common.FileInfo.FormatSize(ExportTableEntry.GetDataLength()));
+
fraFlags.Visible = true;
chkFlagTransactional.Checked = ((ExportTableEntry.Flags & ObjectFlags.Transactional) == ObjectFlags.Transactional);
chkFlagUnreachable.Checked = ((ExportTableEntry.Flags & ObjectFlags.Unreachable) == ObjectFlags.Unreachable);
@@ -81,5 +97,58 @@ namespace UniversalEditor.Plugins.UnrealEngine.UserInterface.Dialogs.Unreal.Pack
Text = "Export Table Entry Properties";
}
}
+
+ [EventHandler(nameof(cmdSourceDataBrowse), nameof(Control.Click))]
+ private void cmdSourceDataBrowse_Click(object sender, EventArgs e)
+ {
+ FileDialog dlg = new FileDialog();
+ if (dlg.ShowDialog() == DialogResult.OK)
+ {
+ ExportTableEntry.SetData(System.IO.File.ReadAllBytes(dlg.SelectedFileName));
+ }
+ }
+
+ [EventHandler(nameof(cmdOK), nameof(Control.Click))]
+ private void cmdOK_Click(object sender, EventArgs e)
+ {
+ if (ImportTableEntry != null)
+ {
+ ImportTableEntry.ObjectName = new NameTableEntry();
+ ImportTableEntry.ObjectName.Name = txtObjectName.Text;
+
+ ImportTableEntry.ClassName = new NameTableEntry();
+ ImportTableEntry.ClassName.Name = cboClassName.Text;
+
+ ImportTableEntry.PackageName = new NameTableEntry();
+ ImportTableEntry.PackageName.Name = cboPackageName.Text;
+ }
+ else if (ExportTableEntry != null)
+ {
+ ExportTableEntry.Name = new NameTableEntry();
+ ExportTableEntry.Name.Name = txtObjectName.Text;
+
+ /*
+ ExportTableEntry.ObjectClass = new ObjectReference();
+
+ cboClassName.Text = ExportTableEntry.ObjectClass?.Name?.Name;
+ cboPackageName.Text = ExportTableEntry.ObjectParent?.Name?.Name;
+ */
+
+ if (chkFlagTransactional.Checked) ExportTableEntry.Flags |= ObjectFlags.Transactional;
+ if (chkFlagUnreachable.Checked) ExportTableEntry.Flags |= ObjectFlags.Unreachable;
+ if (chkFlagPublic.Checked) ExportTableEntry.Flags |= ObjectFlags.Public;
+ if (chkFlagSourceModified.Checked) ExportTableEntry.Flags |= ObjectFlags.SourceModified;
+ if (chkFlagGarbageCollect.Checked) ExportTableEntry.Flags |= ObjectFlags.GarbageCollect;
+ if (chkFlagImporting.Checked) ExportTableEntry.Flags |= ObjectFlags.Importing;
+ if (chkFlagExporting.Checked) ExportTableEntry.Flags |= ObjectFlags.Exporting;
+ if (chkFlagRequireLoad.Checked) ExportTableEntry.Flags |= ObjectFlags.RequireLoad;
+ if (chkFlagHighlightNameEliminateObject.Checked) ExportTableEntry.Flags |= ObjectFlags.HighlightedName;
+ if (chkFlagRemappedNameSingularFunction.Checked) ExportTableEntry.Flags |= ObjectFlags.RemappedName;
+ if (chkFlagSuppressedStateChanged.Checked) ExportTableEntry.Flags |= ObjectFlags.Suppressed;
+ }
+
+ DialogResult = DialogResult.OK;
+ Close();
+ }
}
}
diff --git a/Plugins.UserInterface/UniversalEditor.Plugins.UnrealEngine.UserInterface/Editors/Unreal/Package/UnrealPackageEditor.cs b/Plugins.UserInterface/UniversalEditor.Plugins.UnrealEngine.UserInterface/Editors/Unreal/Package/UnrealPackageEditor.cs
index 40b3b4b9..af4b8958 100644
--- a/Plugins.UserInterface/UniversalEditor.Plugins.UnrealEngine.UserInterface/Editors/Unreal/Package/UnrealPackageEditor.cs
+++ b/Plugins.UserInterface/UniversalEditor.Plugins.UnrealEngine.UserInterface/Editors/Unreal/Package/UnrealPackageEditor.cs
@@ -71,6 +71,9 @@ namespace UniversalEditor.Plugins.UnrealEngine.UserInterface.Editors.Unreal.Pack
Context.AttachCommandEventHandler("UnrealPackageEditor_ExportTreeViewContextMenu_Export", UnrealPackageEditor_ExportTreeViewContextMenu_Export);
+ Context.AttachCommandEventHandler("UnrealPackageEditor_ImportTreeViewContextMenu_Add_Existing", UnrealPackageEditor_ImportTreeViewContextMenu_Add_Existing);
+ Context.AttachCommandEventHandler("UnrealPackageEditor_ExportTreeViewContextMenu_Add_Existing", UnrealPackageEditor_ExportTreeViewContextMenu_Add_Existing);
+
OnObjectModelChanged(e);
}
@@ -92,6 +95,40 @@ namespace UniversalEditor.Plugins.UnrealEngine.UserInterface.Editors.Unreal.Pack
System.IO.File.WriteAllBytes(sfd.SelectedFileName, data);
}
}
+ private void UnrealPackageEditor_ExportTreeViewContextMenu_Add_Existing(object sender, EventArgs e)
+ {
+ ExportTableEntry item = new ExportTableEntry();
+
+ FileDialog ofd = new FileDialog
+ {
+ Mode = FileDialogMode.Open
+ };
+ if (ofd.ShowDialog() == DialogResult.OK)
+ {
+ item.Name = new NameTableEntry();
+ item.Name.Name = System.IO.Path.GetFileNameWithoutExtension(ofd.SelectedFileName);
+
+ item.SetData(System.IO.File.ReadAllBytes(ofd.SelectedFileName));
+
+ UnrealPackageEntryPropertiesDialog dlg = new UnrealPackageEntryPropertiesDialog();
+ dlg.ExportTableEntry = item;
+ if (dlg.ShowDialog() == DialogResult.OK)
+ {
+ UIAddExport(item);
+ }
+ }
+ }
+ private void UnrealPackageEditor_ImportTreeViewContextMenu_Add_Existing(object sender, EventArgs e)
+ {
+ ImportTableEntry item = new ImportTableEntry();
+
+ UnrealPackageEntryPropertiesDialog dlg = new UnrealPackageEntryPropertiesDialog();
+ dlg.ImportTableEntry = item;
+ if (dlg.ShowDialog() == DialogResult.OK)
+ {
+ UIAddImport(item);
+ }
+ }
[EventHandler(nameof(tvExports), "RowActivated")]
void tvExports_RowActivated(object sender, ListViewRowActivatedEventArgs e)
@@ -102,6 +139,7 @@ namespace UniversalEditor.Plugins.UnrealEngine.UserInterface.Editors.Unreal.Pack
dlg.ExportTableEntry = item;
if (dlg.ShowDialog() == DialogResult.OK)
{
+ UIUpdateExport(item, e.Row);
}
}
@@ -114,6 +152,7 @@ namespace UniversalEditor.Plugins.UnrealEngine.UserInterface.Editors.Unreal.Pack
dlg.ImportTableEntry = item;
if (dlg.ShowDialog() == DialogResult.OK)
{
+ UIUpdateImport(item, e.Row);
}
}
@@ -123,17 +162,15 @@ namespace UniversalEditor.Plugins.UnrealEngine.UserInterface.Editors.Unreal.Pack
if (!IsCreated) return;
- DefaultTreeModel tmExports = (tvExports.Model as DefaultTreeModel);
- DefaultTreeModel tmImports = (tvImports.Model as DefaultTreeModel);
-
- tmExports.Rows.Clear();
- tmImports.Rows.Clear();
+ tvExports.Model.Rows.Clear();
+ tvImports.Model.Rows.Clear();
UnrealPackageObjectModel package = (ObjectModel as UnrealPackageObjectModel);
if (package == null) return;
for (int i = 0; i < package.ExportTableEntries.Count; i++)
{
+ UIAddExport(package.ExportTableEntries[i]);
/*
string rowName = package.ExportTableEntries[i].Group?.Name?.ToString() ?? String.Empty;
TreeModelRow rowParent = tmExports.Rows[rowName];
@@ -159,44 +196,69 @@ namespace UniversalEditor.Plugins.UnrealEngine.UserInterface.Editors.Unreal.Pack
rowParent.Rows.Add(rowParent2);
}
*/
- TreeModelRow row = new TreeModelRow(new TreeModelRowColumn[]
- {
- new TreeModelRowColumn(tmExports.Columns[0], package.ExportTableEntries[i].Group?.Name),
- new TreeModelRowColumn(tmExports.Columns[1], package.ExportTableEntries[i].ObjectClass),
- new TreeModelRowColumn(tmExports.Columns[2], package.ExportTableEntries[i].ObjectParent),
- new TreeModelRowColumn(tmExports.Columns[3], package.ExportTableEntries[i].Name?.Name),
- new TreeModelRowColumn(tmExports.Columns[4], package.ExportTableEntries[i].Flags),
- new TreeModelRowColumn(tmExports.Columns[5], package.ExportTableEntries[i].Size),
- new TreeModelRowColumn(tmExports.Columns[6], package.ExportTableEntries[i].Offset)
- });
- row.SetExtraData("item", package.ExportTableEntries[i]);
- // rowParent2.Rows.Add(row);
- tmExports.Rows.Add(row);
}
for (int i = 0; i < package.ImportTableEntries.Count; i++)
{
- string rowName = package.ImportTableEntries[i].Package?.Name?.ToString() ?? String.Empty;
- TreeModelRow rowParent = tmImports.Rows[rowName];
- if (rowParent == null)
- {
- rowParent = new TreeModelRow(new TreeModelRowColumn[]
- {
- new TreeModelRowColumn(tmImports.Columns[0], rowName)
- });
- rowParent.Name = rowName;
- tmImports.Rows.Add(rowParent);
- }
-
- TreeModelRow row = new TreeModelRow(new TreeModelRowColumn[]
- {
- new TreeModelRowColumn(tmImports.Columns[0], package.ImportTableEntries[i].Package),
- new TreeModelRowColumn(tmImports.Columns[1], package.ImportTableEntries[i].ClassName),
- new TreeModelRowColumn(tmImports.Columns[2], package.ImportTableEntries[i].PackageName),
- new TreeModelRowColumn(tmImports.Columns[3], package.ImportTableEntries[i].ObjectName)
- });
- row.SetExtraData("item", package.ImportTableEntries[i]);
- rowParent.Rows.Add(row);
+ UIAddImport(package.ImportTableEntries[i]);
}
}
+
+ private void UIAddImport(ImportTableEntry item)
+ {
+ string rowName = item.Package?.Name?.ToString() ?? String.Empty;
+ TreeModelRow rowParent = tvImports.Model.Rows[rowName];
+ if (rowParent == null)
+ {
+ rowParent = new TreeModelRow(new TreeModelRowColumn[]
+ {
+ new TreeModelRowColumn(tvImports.Model.Columns[0], rowName)
+ });
+ rowParent.Name = rowName;
+ tvImports.Model.Rows.Add(rowParent);
+ }
+
+ TreeModelRow row = new TreeModelRow(new TreeModelRowColumn[]
+ {
+ new TreeModelRowColumn(tvImports.Model.Columns[0], item.Package),
+ new TreeModelRowColumn(tvImports.Model.Columns[1], item.ClassName),
+ new TreeModelRowColumn(tvImports.Model.Columns[2], item.PackageName),
+ new TreeModelRowColumn(tvImports.Model.Columns[3], item.ObjectName)
+ });
+ row.SetExtraData("item", item);
+ rowParent.Rows.Add(row);
+ }
+ private void UIUpdateImport(ImportTableEntry item, TreeModelRow row)
+ {
+ row.RowColumns[0].Value = item.Package;
+ row.RowColumns[1].Value = item.ClassName;
+ row.RowColumns[2].Value = item.PackageName;
+ row.RowColumns[3].Value = item.ObjectName;
+ }
+ private void UIAddExport(ExportTableEntry item)
+ {
+ TreeModelRow row = new TreeModelRow(new TreeModelRowColumn[]
+ {
+ new TreeModelRowColumn(tvExports.Model.Columns[0], item.Group?.Name),
+ new TreeModelRowColumn(tvExports.Model.Columns[1], item.ObjectClass),
+ new TreeModelRowColumn(tvExports.Model.Columns[2], item.ObjectParent),
+ new TreeModelRowColumn(tvExports.Model.Columns[3], item.Name?.Name),
+ new TreeModelRowColumn(tvExports.Model.Columns[4], item.Flags),
+ new TreeModelRowColumn(tvExports.Model.Columns[5], item.Size),
+ new TreeModelRowColumn(tvExports.Model.Columns[6], item.Offset)
+ });
+ row.SetExtraData("item", item);
+ // rowParent2.Rows.Add(row);
+ tvExports.Model.Rows.Add(row);
+ }
+ private void UIUpdateExport(ExportTableEntry item, TreeModelRow row)
+ {
+ row.RowColumns[0].Value = item.Group?.Name;
+ row.RowColumns[1].Value = item.ObjectClass;
+ row.RowColumns[2].Value = item.ObjectParent;
+ row.RowColumns[3].Value = item.Name?.Name;
+ row.RowColumns[4].Value = item.Flags;
+ row.RowColumns[5].Value = item.Size;
+ row.RowColumns[6].Value = item.Offset;
+ }
}
}
diff --git a/Plugins/UniversalEditor.Plugins.UnrealEngine/Associations/Palette/UnrealPalette.uexml b/Plugins/UniversalEditor.Plugins.UnrealEngine/Associations/Palette/UnrealPalette.uexml
new file mode 100644
index 00000000..b3d10e0d
--- /dev/null
+++ b/Plugins/UniversalEditor.Plugins.UnrealEngine/Associations/Palette/UnrealPalette.uexml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+ 0140
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Plugins/UniversalEditor.Plugins.UnrealEngine/ObjectModels/UnrealEngine/ExportTableEntry.cs b/Plugins/UniversalEditor.Plugins.UnrealEngine/ObjectModels/UnrealEngine/ExportTableEntry.cs
index 34a40e66..9897230d 100644
--- a/Plugins/UniversalEditor.Plugins.UnrealEngine/ObjectModels/UnrealEngine/ExportTableEntry.cs
+++ b/Plugins/UniversalEditor.Plugins.UnrealEngine/ObjectModels/UnrealEngine/ExportTableEntry.cs
@@ -42,8 +42,16 @@ namespace UniversalEditor.ObjectModels.UnrealEngine
DataRequest?.Invoke(this, e);
}
+ private byte[] _Data = null;
+ public void SetData(byte[] data)
+ {
+ _Data = data;
+ }
+
public byte[] GetData()
{
+ if (_Data != null) return _Data;
+
FileSystem.DataRequestEventArgs e = new FileSystem.DataRequestEventArgs();
OnDataRequest(e);
return e.Data;
@@ -69,6 +77,14 @@ namespace UniversalEditor.ObjectModels.UnrealEngine
///
/// The group of the object exported by this .
public ObjectReference Group { get; set; } = null;
+
+ public long GetDataLength()
+ {
+ if (_Data != null)
+ return _Data.Length;
+ return (GetData()?.Length).GetValueOrDefault(0);
+ }
+
///
/// Gets or sets the attributes for the object exported by this .
///