You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
AM2RModPacker/AM2RModPacker/ModPacker.Designer.cs

180 lines
8.9 KiB

using System.Collections.Generic;
using Eto.Forms;
using Eto.Drawing;
using AM2RModPackerLib.XML;
using System.IO;
using System.Reflection;
using AM2RModPackerLib;
namespace AM2RModPacker;
public partial class ModPacker : Form
{
public ModPacker()
{
// Fill in lookup tables:
#region Lookup Table filling
labelLookupTable = new Dictionary<ProfileOperatingSystems, Label>()
{
{ ProfileOperatingSystems.Windows, windowsLabel },
{ ProfileOperatingSystems.Linux, windowsLabel },
{ ProfileOperatingSystems.Mac, windowsLabel },
{ ProfileOperatingSystems.Android, windowsLabel },
};
buttonLookupTable = new Dictionary<ProfileOperatingSystems, Button>()
{
{ ProfileOperatingSystems.Windows, windowsButton },
{ ProfileOperatingSystems.Linux, linuxButton },
{ ProfileOperatingSystems.Mac, macButton },
{ ProfileOperatingSystems.Android, apkButton },
};
checkboxLookupTable = new Dictionary<ProfileOperatingSystems, CheckBox>()
{
{ ProfileOperatingSystems.Windows, windowsCheckBox },
{ ProfileOperatingSystems.Linux, linuxCheckBox },
{ ProfileOperatingSystems.Mac, macCheckBox },
{ ProfileOperatingSystems.Android, apkCheckBox },
};
modPathLookupTable = new Dictionary<ProfileOperatingSystems, FieldInfo>()
{
{ ProfileOperatingSystems.Windows, modInfo.GetType().GetField(nameof(modInfo.WindowsModPath)) },
{ ProfileOperatingSystems.Linux, modInfo.GetType().GetField(nameof(modInfo.LinuxModPath)) },
{ ProfileOperatingSystems.Mac, modInfo.GetType().GetField(nameof(modInfo.MacModPath)) },
{ ProfileOperatingSystems.Android, modInfo.GetType().GetField(nameof(modInfo.ApkModPath)) },
};
isModLoadedLookupTable = new Dictionary<ProfileOperatingSystems, PropertyInfo>()
{
{ ProfileOperatingSystems.Windows, modInfo.GetType().GetProperty(nameof(modInfo.IsWindowsModLoaded)) },
{ ProfileOperatingSystems.Linux, modInfo.GetType().GetProperty(nameof(modInfo.IsLinuxModLoaded)) },
{ ProfileOperatingSystems.Mac, modInfo.GetType().GetProperty(nameof(modInfo.IsMacModLoaded)) },
{ ProfileOperatingSystems.Android, modInfo.GetType().GetProperty(nameof(modInfo.IsApkModLoaded)) },
};
#endregion
Title = "AM2R ModPacker " + version;
// TODO: Currently broken as I don't know how to do this from Rider
//Icon = Icon.FromResource("icon64.ico");
MinimumSize = new Size(550, 400);
var mainContent = new DynamicLayout() { Spacing = new Size(15, 15) };
var leftSide = new DynamicLayout() { Padding = 10, Spacing = new Size(5, 5) };
var rightSide = new DynamicLayout() { Padding = 10, Spacing = new Size(5, 5), };
var rightSideScrollable = new Scrollable() { Border = BorderType.None};
// Left side
var modInfoPanel = new DynamicLayout() { Spacing = new Size(5, 5) };
modInfoPanel.AddRow(nameLabel, nameTextBox);
modInfoPanel.AddRow(authorLabel, authorTextBox);
modInfoPanel.AddRow(versionLabel, versionTextBox);
modInfoPanel.AddRow(modNotesLabel);
var modNotesPanel = new DynamicLayout();
modNotesPanel.AddRow(modNotesTextBox);
// Combine together
leftSide.AddRow(modInfoPanel);
leftSide.AddRow(modNotesPanel);
// Right Side
var savePanel = new DynamicLayout();
savePanel.AddRow(customSaveCheckBox, null, customSaveButton);
var saveTextPanel = new DynamicLayout();
saveTextPanel.AddRow(customSaveTextBox);
var miscOptionsPanel = new DynamicLayout() { Spacing = new Size(5, 5) };
miscOptionsPanel.AddRow(musicCheckBox);
miscOptionsPanel.AddRow(yycCheckBox);
miscOptionsPanel.AddRow(windowsCheckBox);
miscOptionsPanel.AddRow(windowsButton, windowsLabel);
miscOptionsPanel.AddRow(apkCheckBox);
miscOptionsPanel.AddRow(apkButton, apkLabel);
miscOptionsPanel.AddRow(linuxCheckBox);
miscOptionsPanel.AddRow(linuxButton, linuxLabel);
miscOptionsPanel.AddRow(macCheckBox);
miscOptionsPanel.AddRow(macButton, macLabel);
var loadZipsPanel = new DynamicLayout() { Spacing = new Size(5, 5) };
loadZipsPanel.AddRow(originalZipButton, originalZipLabel);
var resultPanel = new DynamicLayout() { Spacing = new Size(5, 5) };
resultPanel.AddRow(createButton);
resultPanel.AddRow(createLabel);
// Combine together
rightSide.AddRow(savePanel);
rightSide.AddRow(saveTextPanel);
rightSide.AddRow(miscOptionsPanel);
rightSide.AddRow(new Label() { Text = "I am a spacer!", TextColor = this.BackgroundColor });
rightSide.AddRow(loadZipsPanel);
rightSide.AddRow(resultPanel);
rightSideScrollable.Content = rightSide;
// Combine all into main panel and assign
Splitter splitter = new Splitter() {};
splitter.Panel1 = leftSide;
splitter.Panel2 = rightSideScrollable;
splitter.Panel1MinimumSize = 180;
splitter.Panel2MinimumSize = 320;
splitter.Orientation = Orientation.Horizontal;
mainContent.Add(splitter);
Content = mainContent;
// Assign events
originalZipButton.Click += OriginalZipButton_Click;
createButton.Click += CreateButton_Click;
windowsCheckBox.CheckedChanged += (_, _) => OSCheckboxChanged(ProfileOperatingSystems.Windows);
windowsButton.Click += (_, _) => OSButtonClicked(ProfileOperatingSystems.Windows);
apkCheckBox.CheckedChanged += (_, _) => OSCheckboxChanged(ProfileOperatingSystems.Android);
apkButton.Click += (_, _) => OSButtonClicked(ProfileOperatingSystems.Android);
linuxCheckBox.CheckedChanged += (_, _) => OSCheckboxChanged(ProfileOperatingSystems.Linux);
linuxButton.Click += (_, _) => OSButtonClicked(ProfileOperatingSystems.Linux);
macCheckBox.CheckedChanged += macCheckBox_CheckedChanged;
macButton.Click += (_, _) => OSButtonClicked(ProfileOperatingSystems.Mac);
customSaveCheckBox.CheckedChanged += CustomSaveCheckBoxChecked_Changed;
customSaveButton.Click += CustomSaveDataButton_Click;
yycCheckBox.CheckedChanged += YYCCheckBox_CheckedChanged;
}
#region Design Elements
private Label nameLabel = new Label() { Text = "Mod name:" };
private TextBox nameTextBox = new TextBox();
private Label authorLabel = new Label() { Text = "Author:" };
private TextBox authorTextBox = new TextBox();
private Label versionLabel = new Label() { Text = "Version:" };
private TextBox versionTextBox = new TextBox();
private Label modNotesLabel = new Label() { Text = "Mod notes:" };
private TextArea modNotesTextBox = new TextArea() { };
private CheckBox customSaveCheckBox = new CheckBox() { Text = "Uses custom save directory" };
private Button customSaveButton = new Button() { Text = "Select folder", Enabled = false };
// TODO: remove read only and make it correctly respond to user input
private TextBox customSaveTextBox = new TextBox() { ReadOnly = true};
private CheckBox musicCheckBox = new CheckBox() { Text = "Uses custom music" };
private CheckBox yycCheckBox = new CheckBox() { Text = "Uses the YoYo Compiler" };
private CheckBox windowsCheckBox = new CheckBox() { Text = "Supports Windows" };
private Button windowsButton = new Button() { Text = "Load modded Windows .zip", Enabled = false };
private Label windowsLabel = new Label() { Text = "Modded Windows game loaded!", Visible = false };
private CheckBox apkCheckBox = new CheckBox() { Text = "Supports Android" };
private Button apkButton = new Button() { Text = "Load modded Android APK", Enabled = false };
private Label apkLabel = new Label() { Text = "Modded APK loaded!", Visible = false };
private CheckBox linuxCheckBox = new CheckBox() { Text = "Supports Linux" };
private Button linuxButton = new Button() { Text = "Load modded Linux .zip", Enabled = false };
private Label linuxLabel = new Label() { Text = "Modded Linux game loaded!", Visible = false };
private CheckBox macCheckBox = new CheckBox() { Text = "Supports Mac" };
private Button macButton = new Button() { Text = "Load modded Mac .zip", Enabled = false };
private Label macLabel = new Label() { Text = "Modded Mac game loaded!", Visible = false };
private Button originalZipButton = new Button() { Text = "Load 1.1" };
private Label originalZipLabel = new Label() { Text = "1.1 loaded!", Visible = false};
private Button createButton = new Button() { Text = "Create mod package(s)", Enabled = false };
private Label createLabel = new Label() { Text = "Mod package created!", Visible = false};
#endregion
}