1
0
mirror of synced 2024-12-01 10:37:25 +01:00
Switch-Toolbox/File_Format_Library/GUI/AAMP/AampEditorBase.cs
KillzXGaming c922ff1e4f Big BYAML and AAMP update!
- AAMP can now save back to YAML!
- Added text editor for AAMP editor
- AAMP library has been improved signifcantly, now using one library for all versions.
- BYAML now uses YAML by default. You can still right click in the editor and export as XML if needed.
- BYAML saving speed improved signifcantly.
- BYAML now supports reference nodes and works with 3DW byml files.
- BYAML can now load shift JIS encoding for japanese characters.
- YAML syntax for text editor improved with proper folding and highlighting for certain values.
2020-02-06 18:20:42 -05:00

221 lines
7.2 KiB
C#

using ByamlExt.Byaml;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Syroot.BinaryData;
using EditorCore;
using Toolbox.Library.Forms;
using Toolbox.Library;
using ByamlExt;
namespace FirstPlugin.Forms
{
public partial class AampEditorBase : STUserControl, IFIleEditor
{
public AAMP AampFile;
public List<IFileFormat> GetFileFormats()
{
return new List<IFileFormat>() { AampFile };
}
private TextEditor textEditor;
public AampEditorBase(AAMP aamp, bool IsSaveDialog)
{
InitializeComponent();
treeView1.BackColor = FormThemes.BaseTheme.FormBackColor;
treeView1.ForeColor = FormThemes.BaseTheme.FormForeColor;
stTabControl1.myBackColor = FormThemes.BaseTheme.FormBackColor;
AampFile = aamp;
Text = $"{AampFile.FileName} Type [{AampFile.aampFile.EffectType}]";
STContextMenuStrip contextMenuStrip1 = new STContextMenuStrip();
contextMenuStrip1.Items.Add(new ToolStripMenuItem("Save", null, saveAsToolStripMenuItem_Click, Keys.Control | Keys.I));
contextMenuStrip1.Items.Add(new ToolStripSeparator());
contextMenuStrip1.Items.Add(new ToolStripMenuItem("Export as Yaml", null, ToYamlAction, Keys.Control | Keys.A));
contextMenuStrip1.Items.Add(new ToolStripMenuItem("Open as Yaml", null, OpenYamlEditorAction, Keys.Control | Keys.A));
this.treeView1.ContextMenuStrip = contextMenuStrip1;
textEditor = new TextEditor();
textEditor.Dock = DockStyle.Fill;
textEditor.ClearContextMenus();
textEditor.AddContextMenu("Decompile", TextEditorToYaml);
textEditor.AddContextMenu("Compile", TextEditorFromYaml);
stPanel2.Controls.Add(textEditor);
}
private void TextEditorToYaml(object sender, EventArgs e)
{
if (AampFile == null) return;
textEditor.FillEditor(AampFile.ConvertToString());
textEditor.IsYAML = true;
}
private void TextEditorFromYaml(object sender, EventArgs e)
{
if (AampFile == null) return;
var text = textEditor.GetText();
if (text != string.Empty) {
try
{
AampFile.ConvertFromString(text);
}
catch (Exception ex)
{
MessageBox.Show("Aamp failed to convert! " + ex.ToString());
return;
}
MessageBox.Show("Aamp converted successfully!");
}
}
private void OpenYamlEditorAction(object sender, EventArgs e)
{
string yaml = AampLibraryCSharp.YamlConverter.ToYaml(AampFile.aampFile);
STForm form = new STForm();
form.Text = "YAML Text Editor";
var panel = new STPanel() { Dock = DockStyle.Fill, };
form.AddControl(panel);
var editor = new TextEditor() { Dock = DockStyle.Fill, };
editor.FillEditor(yaml);
editor.IsYAML = true;
panel.Controls.Add(editor);
if (form.ShowDialog() == DialogResult.OK)
{
}
}
private void ToYamlAction(object sender, EventArgs e)
{
SaveFileDialog sfd = new SaveFileDialog();
sfd.Filter = "YAML|*.yaml;";
if (sfd.ShowDialog() == DialogResult.OK)
{
string yaml = AampLibraryCSharp.YamlConverter.ToYaml(AampFile.aampFile);
File.WriteAllText(sfd.FileName, yaml);
}
}
private void CopyNode_Click(object sender, EventArgs e)
{
Clipboard.SetText(treeView1.SelectedNode.Text);
}
private void saveAsToolStripMenuItem_Click(object sender, EventArgs e)
{
SaveFileDialog sav = new SaveFileDialog() { FileName = AampFile.FileName, Filter = "Parameter Archive | *.aamp" };
if (sav.ShowDialog() == DialogResult.OK)
{
Toolbox.Library.IO.STFileSaver.SaveFileFormat(AampFile, sav.FileName);
}
}
private void editValueNodeMenuItem_Click(object sender, EventArgs e)
{
if (listViewCustom1.SelectedItems.Count <= 0)
return;
OnEditorClick(listViewCustom1.SelectedItems[0]);
}
private void ResetValues()
{
if (treeView1.SelectedNode == null)
return;
listViewCustom1.Items.Clear();
var targetNodeCollection = treeView1.SelectedNode.Nodes;
dynamic target = treeView1.SelectedNode.Tag;
}
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) {
ResetValues();
TreeView_AfterSelect();
}
private void addNodeToolStripMenuItem_Click(object sender, EventArgs e) {
if (treeView1.SelectedNode == null)
return;
AddParamEntry(treeView1.SelectedNode);
}
public virtual void OnEditorClick(ListViewItem SelectedItem) { }
public virtual void TreeView_AfterSelect() { }
public virtual void AddParamEntry(TreeNode parent) { }
public virtual void RenameParamEntry(ListViewItem SelectedItem) { }
public virtual void OnEntryDeletion(object target, TreeNode parent) { }
private void deleteToolStripMenuItem_Click(object sender, EventArgs e)
{
if (listViewCustom1.SelectedItems.Count <= 0 && treeView1.SelectedNode != null)
return;
var result = MessageBox.Show("Are you sure you want to remove this entry? This cannot be undone!",
$"Entry {listViewCustom1.SelectedItems[0].Text}", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (result == DialogResult.Yes)
{
OnEntryDeletion(listViewCustom1.SelectedItems[0].Tag, treeView1.SelectedNode);
int index = listViewCustom1.Items.IndexOf(listViewCustom1.SelectedItems[0]);
listViewCustom1.Items.RemoveAt(index);
}
}
private void renameToolStripMenuItem_Click(object sender, EventArgs e) {
if (listViewCustom1.SelectedItems.Count <= 0)
return;
RenameParamEntry(listViewCustom1.SelectedItems[0]);
}
private void deleteNodeToolStripMenuItem_Click(object sender, EventArgs e)
{
if (treeView1.SelectedNode == null)
{
return;
}
}
private void contentContainer_Paint(object sender, PaintEventArgs e)
{
}
private void listViewCustom1_MouseClick(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
Point pt = listViewCustom1.PointToScreen(e.Location);
stContextMenuStrip1.Show(pt);
}
}
private void stContextMenuStrip1_Opening(object sender, CancelEventArgs e)
{
}
}
}