improvements to Unreal Engine plugin and UI
This commit is contained in:
parent
358d78880c
commit
76a7664044
@ -4,17 +4,24 @@
|
||||
<Commands>
|
||||
<Command ID="UnrealPackageEditor_ExportTreeViewContextMenu">
|
||||
<Items>
|
||||
<CommandReference CommandID="UnrealPackageEditor_ExportTreeViewContextMenu_Add_Existing" />
|
||||
<Separator />
|
||||
<CommandReference CommandID="UnrealPackageEditor_ExportTreeViewContextMenu_Export" />
|
||||
<CommandReference CommandID="FileProperties" />
|
||||
</Items>
|
||||
</Command>
|
||||
<Command ID="UnrealPackageEditor_ImportTreeViewContextMenu">
|
||||
<Items>
|
||||
<CommandReference CommandID="UnrealPackageEditor_ImportTreeViewContextMenu_Add_Existing" />
|
||||
<Separator />
|
||||
<CommandReference CommandID="FileProperties" />
|
||||
</Items>
|
||||
</Command>
|
||||
|
||||
<Command ID="UnrealPackageEditor_ExportTreeViewContextMenu_Export" Title="Export..." />
|
||||
<Command ID="UnrealPackageEditor_ExportTreeViewContextMenu_Add_Existing" Title="Add E_xisting Item..." />
|
||||
<Command ID="UnrealPackageEditor_ImportTreeViewContextMenu_Add_Existing" Title="Add E_xisting Item..." />
|
||||
|
||||
<Command ID="UnrealPackageEditor_ExportTreeViewContextMenu_Export" Title="_Export..." />
|
||||
</Commands>
|
||||
</Editor>
|
||||
</Editors>
|
||||
|
||||
@ -24,12 +24,15 @@
|
||||
<property name="can_focus">False</property>
|
||||
<property name="layout_style">end</property>
|
||||
<child>
|
||||
<object class="GtkButton">
|
||||
<object class="GtkButton" id="cmdOK">
|
||||
<property name="label">gtk-ok</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="use_stock">True</property>
|
||||
<style>
|
||||
<class name="suggested-action"/>
|
||||
</style>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
@ -38,7 +41,7 @@
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton">
|
||||
<object class="GtkButton" id="cmdCancel">
|
||||
<property name="label">gtk-cancel</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
@ -114,7 +117,7 @@
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
<object class="GtkLabel" id="lblSourceData">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Source data</property>
|
||||
|
||||
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -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<ExportTableEntry>("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<ImportTableEntry>("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<ImportTableEntry>("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<ExportTableEntry>("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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -0,0 +1,22 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<UniversalEditor Version="4.0">
|
||||
<Associations>
|
||||
<Association>
|
||||
<Filters>
|
||||
<Filter Title="Unreal Engine color palette" ContentType="application/x-unreal-palette" IconName="gnome-color-manager">
|
||||
<MagicByteSequences>
|
||||
<MagicByteSequence>
|
||||
<MagicByte Type="HexString">0140</MagicByte>
|
||||
</MagicByteSequence>
|
||||
</MagicByteSequences>
|
||||
</Filter>
|
||||
</Filters>
|
||||
<ObjectModels>
|
||||
<ObjectModel TypeName="UniversalEditor.ObjectModels.Multimedia.Palette.PaletteObjectModel" />
|
||||
</ObjectModels>
|
||||
<DataFormats>
|
||||
<DataFormat TypeName="UniversalEditor.DataFormats.Multimedia.Palette.Unreal.UnrealPaletteDataFormat" />
|
||||
</DataFormats>
|
||||
</Association>
|
||||
</Associations>
|
||||
</UniversalEditor>
|
||||
@ -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
|
||||
/// </summary>
|
||||
/// <value>The group of the object exported by this <see cref="ExportTableEntry" />.</value>
|
||||
public ObjectReference Group { get; set; } = null;
|
||||
|
||||
public long GetDataLength()
|
||||
{
|
||||
if (_Data != null)
|
||||
return _Data.Length;
|
||||
return (GetData()?.Length).GetValueOrDefault(0);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the attributes for the object exported by this <see cref="ExportTableEntry" />.
|
||||
/// </summary>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user