mirror of
https://github.com/KillzXGaming/Switch-Toolbox
synced 2024-11-10 07:04:36 +00:00
Bflyt editor improvements
This commit is contained in:
parent
fce999e1fb
commit
ccbb566a88
26 changed files with 1315 additions and 31 deletions
|
@ -1,8 +1,8 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Linq;
|
||||
using Toolbox;
|
||||
using System.Windows.Forms;
|
||||
using Toolbox.Library;
|
||||
|
@ -202,13 +202,15 @@ namespace LayoutBXLYT.Cafe
|
|||
BNTX bntx = (BNTX)file.OpenFile();
|
||||
file.FileFormat = bntx;
|
||||
foreach (var tex in bntx.Textures)
|
||||
textures.Add(tex.Key, tex.Value);
|
||||
if (!textures.ContainsKey(tex.Key))
|
||||
textures.Add(tex.Key, tex.Value);
|
||||
}
|
||||
else if (Utils.GetExtension(file.FileName) == ".bflim")
|
||||
{
|
||||
BFLIM bflim = (BFLIM)file.OpenFile();
|
||||
file.FileFormat = bflim;
|
||||
textures.Add(bflim.FileName, bflim);
|
||||
if (!textures.ContainsKey(bflim.FileName))
|
||||
textures.Add(bflim.FileName, bflim);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -233,6 +235,9 @@ namespace LayoutBXLYT.Cafe
|
|||
private ushort ByteOrderMark;
|
||||
private ushort HeaderSize;
|
||||
|
||||
[Browsable(false)]
|
||||
public Dictionary<string, BasePane> PaneLookup = new Dictionary<string, BasePane>();
|
||||
|
||||
[Browsable(false)]
|
||||
public LYT1 LayoutInfo { get; set; }
|
||||
[Browsable(false)]
|
||||
|
@ -261,6 +266,12 @@ namespace LayoutBXLYT.Cafe
|
|||
get { return TextureList.Textures; }
|
||||
}
|
||||
|
||||
[Browsable(false)]
|
||||
public override List<string> Fonts
|
||||
{
|
||||
get { return FontList.Fonts; }
|
||||
}
|
||||
|
||||
[Browsable(false)]
|
||||
public override Dictionary<string, STGenericTexture> GetTextures
|
||||
{
|
||||
|
@ -283,6 +294,17 @@ namespace LayoutBXLYT.Cafe
|
|||
return panes;
|
||||
}
|
||||
|
||||
public override List<BxlytMaterial> GetMaterials()
|
||||
{
|
||||
List<BxlytMaterial> materials = new List<BxlytMaterial>();
|
||||
if (MaterialList != null && MaterialList.Materials != null)
|
||||
{
|
||||
for (int i = 0; i < MaterialList.Materials.Count; i++)
|
||||
materials.Add(MaterialList.Materials[i]);
|
||||
}
|
||||
return materials;
|
||||
}
|
||||
|
||||
private void GetPaneChildren(List<PAN1> panes, PAN1 root)
|
||||
{
|
||||
panes.Add(root);
|
||||
|
@ -369,6 +391,7 @@ namespace LayoutBXLYT.Cafe
|
|||
break;
|
||||
case "pan1":
|
||||
var panel = new PAN1(reader);
|
||||
AddPaneToTable(panel);
|
||||
if (!setRoot)
|
||||
{
|
||||
RootPane = panel;
|
||||
|
@ -380,30 +403,36 @@ namespace LayoutBXLYT.Cafe
|
|||
break;
|
||||
case "pic1":
|
||||
var picturePanel = new PIC1(reader, this);
|
||||
AddPaneToTable(picturePanel);
|
||||
|
||||
SetPane(picturePanel, parentPane);
|
||||
currentPane = picturePanel;
|
||||
break;
|
||||
case "txt1":
|
||||
var textPanel = new TXT1(reader, this);
|
||||
AddPaneToTable(textPanel);
|
||||
|
||||
SetPane(textPanel, parentPane);
|
||||
currentPane = textPanel;
|
||||
break;
|
||||
case "bnd1":
|
||||
var boundsPanel = new BND1(reader, this);
|
||||
AddPaneToTable(boundsPanel);
|
||||
|
||||
SetPane(boundsPanel, parentPane);
|
||||
currentPane = boundsPanel;
|
||||
break;
|
||||
case "prt1":
|
||||
var partsPanel = new PRT1(reader, this);
|
||||
AddPaneToTable(partsPanel);
|
||||
|
||||
SetPane(partsPanel, parentPane);
|
||||
currentPane = partsPanel;
|
||||
break;
|
||||
case "wnd1":
|
||||
var windowPanel = new WND1(reader, this);
|
||||
AddPaneToTable(windowPanel);
|
||||
|
||||
SetPane(windowPanel, parentPane);
|
||||
currentPane = windowPanel;
|
||||
break;
|
||||
|
@ -439,7 +468,8 @@ namespace LayoutBXLYT.Cafe
|
|||
Container = new CNT1(reader, this);
|
||||
break;*/
|
||||
case "usd1":
|
||||
((PAN1)currentPane).UserData = new USD1(reader, this);
|
||||
if (currentPane != null)
|
||||
((PAN1)currentPane).UserData = new USD1(reader, this);
|
||||
break;
|
||||
//If the section is not supported store the raw bytes
|
||||
default:
|
||||
|
@ -453,6 +483,12 @@ namespace LayoutBXLYT.Cafe
|
|||
}
|
||||
}
|
||||
|
||||
private void AddPaneToTable(BasePane pane)
|
||||
{
|
||||
if (!PaneLookup.ContainsKey(pane.Name))
|
||||
PaneLookup.Add(pane.Name, pane);
|
||||
}
|
||||
|
||||
private void SetPane(BasePane pane, BasePane parentPane)
|
||||
{
|
||||
if (parentPane != null)
|
||||
|
@ -1013,10 +1049,36 @@ namespace LayoutBXLYT.Cafe
|
|||
|
||||
public class GRP1 : BasePane
|
||||
{
|
||||
private Header LayoutFile;
|
||||
|
||||
public override string Signature { get; } = "grp1";
|
||||
|
||||
public List<string> Panes { get; set; } = new List<string>();
|
||||
|
||||
private bool displayInEditor = true;
|
||||
public override bool DisplayInEditor
|
||||
{
|
||||
get { return displayInEditor; }
|
||||
set
|
||||
{
|
||||
displayInEditor = value;
|
||||
for (int i = 0; i < Panes.Count; i++)
|
||||
{
|
||||
var pane = SearchPane(Panes[i]);
|
||||
Console.WriteLine($"searching {Panes[i]} {pane != null}");
|
||||
if (pane != null)
|
||||
pane.DisplayInEditor = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private BasePane SearchPane(string name)
|
||||
{
|
||||
if (LayoutFile.PaneLookup.ContainsKey(name))
|
||||
return LayoutFile.PaneLookup[name];
|
||||
return null;
|
||||
}
|
||||
|
||||
public GRP1() : base()
|
||||
{
|
||||
|
||||
|
@ -1024,6 +1086,8 @@ namespace LayoutBXLYT.Cafe
|
|||
|
||||
public GRP1(FileReader reader, Header header)
|
||||
{
|
||||
LayoutFile = header;
|
||||
|
||||
ushort numNodes = 0;
|
||||
if (header.VersionMajor >= 5)
|
||||
{
|
||||
|
@ -1038,7 +1102,7 @@ namespace LayoutBXLYT.Cafe
|
|||
}
|
||||
|
||||
for (int i = 0; i < numNodes; i++)
|
||||
Panes.Add(reader.ReadString(24));
|
||||
Panes.Add(reader.ReadString(24).Replace("\0", string.Empty));
|
||||
}
|
||||
|
||||
public override void Write(FileWriter writer, BxlytHeader header)
|
||||
|
@ -1081,10 +1145,95 @@ namespace LayoutBXLYT.Cafe
|
|||
[DisplayName("External Layout File"), CategoryAttribute("Parts")]
|
||||
public string LayoutFile { get; set; }
|
||||
|
||||
private BFLYT ExternalLayout;
|
||||
|
||||
public BasePane GetExternalPane()
|
||||
{
|
||||
if (ExternalLayout == null)
|
||||
ExternalLayout = SearchExternalFile();
|
||||
|
||||
if (ExternalLayout == null)
|
||||
return null;
|
||||
|
||||
return ExternalLayout.header.RootPane;
|
||||
}
|
||||
|
||||
//Get textures if possible from the external parts file
|
||||
public void UpdateTextureData(Dictionary<string, STGenericTexture> textures)
|
||||
{
|
||||
if (ExternalLayout == null)
|
||||
{
|
||||
ExternalLayout = SearchExternalFile();
|
||||
if (ExternalLayout == null)
|
||||
return;
|
||||
|
||||
var textureList = ExternalLayout.GetTextures();
|
||||
foreach (var tex in textureList)
|
||||
if (!textures.ContainsKey(tex.Key))
|
||||
textures.Add(tex.Key, tex.Value);
|
||||
|
||||
textureList.Clear();
|
||||
}
|
||||
}
|
||||
|
||||
private BFLYT SearchExternalFile()
|
||||
{
|
||||
var fileFormat = layoutFile.FileInfo;
|
||||
|
||||
//File is outside an archive so check the contents it is in
|
||||
if (File.Exists(fileFormat.FileName))
|
||||
{
|
||||
string folder = Path.GetDirectoryName(fileFormat.FileName);
|
||||
foreach (var file in Directory.GetFiles(folder))
|
||||
{
|
||||
if (file.Contains(LayoutFile))
|
||||
{
|
||||
var bflyt = STFileLoader.OpenFileFormat(file) as BFLYT;
|
||||
if (bflyt == null)
|
||||
continue;
|
||||
|
||||
bflyt.IFileInfo = new IFileInfo();
|
||||
bflyt.IFileInfo.ArchiveParent = fileFormat.IFileInfo.ArchiveParent;
|
||||
return bflyt;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (fileFormat.IFileInfo.ArchiveParent != null)
|
||||
{
|
||||
BFLYT bflyt = null;
|
||||
SearchArchive(fileFormat.IFileInfo.ArchiveParent, ref bflyt);
|
||||
return bflyt;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private void SearchArchive(IArchiveFile archiveFile, ref BFLYT layoutFile)
|
||||
{
|
||||
layoutFile = null;
|
||||
|
||||
foreach (var file in archiveFile.Files)
|
||||
if (file.FileName.Contains(LayoutFile))
|
||||
{
|
||||
var openedFile = file.OpenFile();
|
||||
if (openedFile is IArchiveFile)
|
||||
SearchArchive((IArchiveFile)openedFile, ref layoutFile);
|
||||
else if (openedFile is BFLYT)
|
||||
{
|
||||
layoutFile = openedFile as BFLYT;
|
||||
layoutFile.IFileInfo = new IFileInfo();
|
||||
layoutFile.IFileInfo.ArchiveParent = layoutFile.IFileInfo.ArchiveParent;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private Header layoutFile;
|
||||
public PRT1(FileReader reader, Header header) : base(reader)
|
||||
{
|
||||
Properties = new List<PartProperty>();
|
||||
layoutFile = header;
|
||||
|
||||
Properties = new List<PartProperty>();
|
||||
StartPosition = reader.Position - 84;
|
||||
|
||||
uint properyCount = reader.ReadUInt32();
|
||||
|
@ -1617,10 +1766,10 @@ namespace LayoutBXLYT.Cafe
|
|||
|
||||
//Thanks to shibbs for the material info
|
||||
//https://github.com/shibbo/flyte/blob/master/flyte/lyt/common/MAT1.cs
|
||||
public class Material
|
||||
public class Material : BxlytMaterial
|
||||
{
|
||||
[DisplayName("Name"), CategoryAttribute("General")]
|
||||
public string Name { get; set; }
|
||||
public override string Name { get; set; }
|
||||
|
||||
[DisplayName("Black Color"), CategoryAttribute("Color")]
|
||||
public STColor8 BlackColor { get; set; }
|
||||
|
|
|
@ -11,6 +11,13 @@ namespace LayoutBXLYT
|
|||
{
|
||||
public class FLYT
|
||||
{
|
||||
public static BFLYT.Header FromXml(string text)
|
||||
{
|
||||
BFLYT.Header header = new BFLYT.Header();
|
||||
header.RootGroup = new BFLYT.GRP1();
|
||||
return header;
|
||||
}
|
||||
|
||||
public static string ToXml(BFLYT.Header header)
|
||||
{
|
||||
return "";
|
||||
|
|
|
@ -20,7 +20,7 @@ namespace LayoutBXLYT
|
|||
public virtual bool InfluenceAlpha { get; set; }
|
||||
|
||||
[Browsable(false)]
|
||||
public bool DisplayInEditor { get; set; } = true;
|
||||
public virtual bool DisplayInEditor { get; set; } = true;
|
||||
|
||||
[DisplayName("Name"), CategoryAttribute("Pane")]
|
||||
public string Name { get; set; }
|
||||
|
@ -259,6 +259,9 @@ namespace LayoutBXLYT
|
|||
[Browsable(false)]
|
||||
public virtual List<string> Textures { get; }
|
||||
|
||||
[Browsable(false)]
|
||||
public virtual List<string> Fonts { get; }
|
||||
|
||||
[Browsable(false)]
|
||||
internal uint Version;
|
||||
|
||||
|
@ -271,6 +274,11 @@ namespace LayoutBXLYT
|
|||
}
|
||||
}
|
||||
|
||||
[Browsable(false)]
|
||||
public virtual List<BxlytMaterial> GetMaterials()
|
||||
{
|
||||
return new List<BxlytMaterial>();
|
||||
}
|
||||
|
||||
[RefreshProperties(RefreshProperties.All)]
|
||||
public uint VersionMajor { get; set; }
|
||||
|
@ -300,6 +308,12 @@ namespace LayoutBXLYT
|
|||
}
|
||||
}
|
||||
|
||||
public class BxlytMaterial
|
||||
{
|
||||
[DisplayName("Name"), CategoryAttribute("General")]
|
||||
public virtual string Name { get; set; }
|
||||
}
|
||||
|
||||
public class SectionCommon
|
||||
{
|
||||
public virtual string Signature { get; }
|
||||
|
|
|
@ -0,0 +1,29 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using FirstPlugin;
|
||||
using Toolbox.Library;
|
||||
|
||||
namespace LayoutBXLYT
|
||||
{
|
||||
public class LayoutTextureLoader
|
||||
{
|
||||
public static List<BNTX> SwitchTextures = new List<BNTX>();
|
||||
public static Dictionary<string, STGenericTexture> Textures = new Dictionary<string, STGenericTexture>();
|
||||
public static List<string> SearchFolderPaths = new List<string>();
|
||||
|
||||
/* public static Dictionary<string, STGenericTexture> GetTextures(List<string> textureList, IArchiveFile archive = null)
|
||||
{
|
||||
var textures = new Dictionary<string, STGenericTexture>();
|
||||
if (archive != null)
|
||||
{
|
||||
foreach (var file in archive.Files)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}*/
|
||||
}
|
||||
}
|
|
@ -199,7 +199,7 @@ namespace FirstPlugin
|
|||
{0x35, TEX_FORMAT.ASTC_10x5_UNORM},
|
||||
{0x36, TEX_FORMAT.ASTC_10x6_UNORM},
|
||||
{0x37, TEX_FORMAT.ASTC_10x8_UNORM},
|
||||
{0x38, TEX_FORMAT.ASTC_10x10_UNORM},
|
||||
{0x38, TEX_FORMAT.ASTC_8x8_UNORM},
|
||||
{0x39, TEX_FORMAT.ASTC_12x10_UNORM},
|
||||
{0x3a, TEX_FORMAT.ASTC_12x12_UNORM},
|
||||
{0x3b, TEX_FORMAT.B5G5R5A1_UNORM},
|
||||
|
|
|
@ -304,6 +304,7 @@
|
|||
<Compile Include="FileFormats\Layout\CAFE\Materials\TextureTransform.cs" />
|
||||
<Compile Include="FileFormats\Layout\CTR\BCLYT.cs" />
|
||||
<Compile Include="FileFormats\Layout\CAFE\FLYT.cs" />
|
||||
<Compile Include="FileFormats\Layout\LayoutTextureLoader.cs" />
|
||||
<Compile Include="FileFormats\Layout\PaneTreeWrapper.cs" />
|
||||
<Compile Include="FileFormats\Layout\Common.cs" />
|
||||
<Compile Include="FileFormats\Layout\Rev\BRLYT.cs" />
|
||||
|
@ -341,6 +342,12 @@
|
|||
<Compile Include="GUI\BFLYT\LayoutHierarchy.Designer.cs">
|
||||
<DependentUpon>LayoutHierarchy.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="GUI\BFLYT\LayoutPartsEditor.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="GUI\BFLYT\LayoutPartsEditor.Designer.cs">
|
||||
<DependentUpon>LayoutPartsEditor.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="GUI\BFLYT\LayoutProperties.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
|
@ -365,6 +372,7 @@
|
|||
<Compile Include="GUI\BFLYT\LayoutViewer.Designer.cs">
|
||||
<DependentUpon>LayoutViewer.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="GUI\BFLYT\Textbox.cs" />
|
||||
<Compile Include="GUI\BFLYT\UserDataEditor.cs">
|
||||
<SubType>UserControl</SubType>
|
||||
</Compile>
|
||||
|
@ -1146,9 +1154,15 @@
|
|||
<EmbeddedResource Include="GUI\BFLYT\LayoutHierarchy.resx">
|
||||
<DependentUpon>LayoutHierarchy.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="GUI\BFLYT\LayoutPartsEditor.resx">
|
||||
<DependentUpon>LayoutPartsEditor.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="GUI\BFLYT\LayoutProperties.resx">
|
||||
<DependentUpon>LayoutProperties.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="GUI\BFLYT\LayoutTextDocked.resx">
|
||||
<DependentUpon>LayoutTextDocked.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="GUI\BFLYT\LayoutTextureList.resx">
|
||||
<DependentUpon>LayoutTextureList.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
|
|
|
@ -63,6 +63,7 @@ namespace LayoutBXLYT
|
|||
private LayoutTextureList LayoutTextureList;
|
||||
private LayoutProperties LayoutProperties;
|
||||
private LayoutTextDocked TextConverter;
|
||||
private LayoutPartsEditor LayoutPartsEditor;
|
||||
|
||||
private bool isLoaded = false;
|
||||
public void LoadBxlyt(BxlytHeader header, string fileName)
|
||||
|
@ -86,6 +87,7 @@ namespace LayoutBXLYT
|
|||
private void InitializeDockPanels()
|
||||
{
|
||||
ShowTextureList();
|
||||
ShowPartsEditor();
|
||||
ShowPaneHierarchy();
|
||||
ShowPropertiesPanel();
|
||||
UpdateBackColor();
|
||||
|
@ -141,10 +143,10 @@ namespace LayoutBXLYT
|
|||
{
|
||||
if (isChecked) return;
|
||||
|
||||
ActiveViewport.SelectedPanes.Clear();
|
||||
|
||||
if (LayoutProperties != null && (string)sender == "Select")
|
||||
{
|
||||
ActiveViewport.SelectedPanes.Clear();
|
||||
|
||||
if (e is TreeViewEventArgs) {
|
||||
var node = ((TreeViewEventArgs)e).Node;
|
||||
|
||||
|
@ -200,6 +202,13 @@ namespace LayoutBXLYT
|
|||
ShowTextureList();
|
||||
}
|
||||
|
||||
private void ShowPartsEditor()
|
||||
{
|
||||
LayoutPartsEditor = new LayoutPartsEditor();
|
||||
LayoutPartsEditor.Text = "Parts Editor";
|
||||
LayoutPartsEditor.Show(dockPanel1, DockState.DockLeft);
|
||||
}
|
||||
|
||||
private void ShowPropertiesPanel()
|
||||
{
|
||||
LayoutProperties = new LayoutProperties();
|
||||
|
|
|
@ -33,22 +33,25 @@
|
|||
//
|
||||
// treeView1
|
||||
//
|
||||
this.treeView1.CheckBoxes = true;
|
||||
this.treeView1.BorderStyle = System.Windows.Forms.BorderStyle.None;
|
||||
this.treeView1.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.treeView1.Location = new System.Drawing.Point(0, 0);
|
||||
this.treeView1.Name = "treeView1";
|
||||
this.treeView1.Size = new System.Drawing.Size(317, 372);
|
||||
this.treeView1.Size = new System.Drawing.Size(301, 333);
|
||||
this.treeView1.TabIndex = 0;
|
||||
this.treeView1.AfterCheck += new System.Windows.Forms.TreeViewEventHandler(this.treeView1_AfterCheck);
|
||||
this.treeView1.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeView1_AfterSelect);
|
||||
this.treeView1.NodeMouseClick += new System.Windows.Forms.TreeNodeMouseClickEventHandler(this.treeView1_NodeMouseClick);
|
||||
this.treeView1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.treeView1_KeyDown);
|
||||
this.treeView1.MouseClick += new System.Windows.Forms.MouseEventHandler(this.treeView1_MouseClick);
|
||||
//
|
||||
// LayoutHierarchy
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.ClientSize = new System.Drawing.Size(301, 333);
|
||||
this.Controls.Add(this.treeView1);
|
||||
this.Name = "LayoutHierarchy";
|
||||
this.Size = new System.Drawing.Size(317, 372);
|
||||
this.ResumeLayout(false);
|
||||
|
||||
}
|
||||
|
|
|
@ -15,6 +15,8 @@ namespace LayoutBXLYT
|
|||
{
|
||||
public partial class LayoutHierarchy : LayoutDocked
|
||||
{
|
||||
private STContextMenuStrip ContexMenu;
|
||||
|
||||
public LayoutHierarchy()
|
||||
{
|
||||
InitializeComponent();
|
||||
|
@ -23,6 +25,7 @@ namespace LayoutBXLYT
|
|||
treeView1.ForeColor = FormThemes.BaseTheme.FormForeColor;
|
||||
|
||||
var imgList = new ImageList();
|
||||
imgList.ColorDepth = ColorDepth.Depth32Bit;
|
||||
imgList.Images.Add("folder", Toolbox.Library.Properties.Resources.Folder);
|
||||
imgList.Images.Add("AlignmentPane", FirstPlugin.Properties.Resources.AlignmentPane);
|
||||
imgList.Images.Add("WindowPane", FirstPlugin.Properties.Resources.WindowPane);
|
||||
|
@ -32,9 +35,17 @@ namespace LayoutBXLYT
|
|||
imgList.Images.Add("PicturePane", FirstPlugin.Properties.Resources.PicturePane);
|
||||
imgList.Images.Add("QuickAcess", FirstPlugin.Properties.Resources.QuickAccess);
|
||||
imgList.Images.Add("TextPane", FirstPlugin.Properties.Resources.TextPane);
|
||||
imgList.Images.Add("material", Toolbox.Library.Properties.Resources.materialSphere);
|
||||
imgList.Images.Add("texture", Toolbox.Library.Properties.Resources.Texture);
|
||||
imgList.Images.Add("font", Toolbox.Library.Properties.Resources.Font);
|
||||
|
||||
imgList.ImageSize = new Size(22,22);
|
||||
treeView1.ImageList = imgList;
|
||||
|
||||
BackColor = FormThemes.BaseTheme.FormBackColor;
|
||||
ForeColor = FormThemes.BaseTheme.FormForeColor;
|
||||
|
||||
ContexMenu = new STContextMenuStrip();
|
||||
}
|
||||
|
||||
private bool isLoaded = false;
|
||||
|
@ -47,9 +58,11 @@ namespace LayoutBXLYT
|
|||
treeView1.BeginUpdate();
|
||||
treeView1.Nodes.Clear();
|
||||
|
||||
treeView1.Nodes.Add(new TreeNode("File Settings") {Tag = bxlyt });
|
||||
|
||||
CreateQuickAccess(bxlyt);
|
||||
treeView1.Nodes.Add(new TreeNode("File Settings") {Tag = bxlyt });
|
||||
LoadTextures(bxlyt.Textures);
|
||||
LoadFonts(bxlyt.Fonts);
|
||||
LoadMaterials(bxlyt.GetMaterials());
|
||||
LoadPane(bxlyt.RootGroup);
|
||||
LoadPane(bxlyt.RootPane);
|
||||
|
||||
|
@ -64,6 +77,46 @@ namespace LayoutBXLYT
|
|||
isLoaded = false;
|
||||
}
|
||||
|
||||
private void LoadTextures(List<string> textures)
|
||||
{
|
||||
TreeNode node = new TreeNode("Textures");
|
||||
treeView1.Nodes.Add(node);
|
||||
for (int i = 0; i < textures.Count; i++)
|
||||
{
|
||||
TreeNode matNode = new TreeNode(textures[i]);
|
||||
matNode.ImageKey = "texture";
|
||||
matNode.SelectedImageKey = "texture";
|
||||
node.Nodes.Add(matNode);
|
||||
}
|
||||
}
|
||||
|
||||
private void LoadFonts(List<string> fonts)
|
||||
{
|
||||
TreeNode node = new TreeNode("Fonts");
|
||||
treeView1.Nodes.Add(node);
|
||||
for (int i = 0; i < fonts.Count; i++)
|
||||
{
|
||||
TreeNode matNode = new TreeNode(fonts[i]);
|
||||
matNode.ImageKey = "font";
|
||||
matNode.SelectedImageKey = "font";
|
||||
node.Nodes.Add(matNode);
|
||||
}
|
||||
}
|
||||
|
||||
private void LoadMaterials(List<BxlytMaterial> materials)
|
||||
{
|
||||
TreeNode node = new TreeNode("Materials");
|
||||
treeView1.Nodes.Add(node);
|
||||
for (int i = 0; i < materials.Count; i++)
|
||||
{
|
||||
TreeNode matNode = new TreeNode(materials[i].Name);
|
||||
matNode.Tag = materials[i];
|
||||
matNode.ImageKey = "material";
|
||||
matNode.SelectedImageKey = "material";
|
||||
node.Nodes.Add(matNode);
|
||||
}
|
||||
}
|
||||
|
||||
private void CreateQuickAccess(BxlytHeader bxlyt)
|
||||
{
|
||||
var panes = new List<BasePane>();
|
||||
|
@ -137,9 +190,9 @@ namespace LayoutBXLYT
|
|||
private PaneTreeWrapper CreatePaneWrapper(BasePane pane)
|
||||
{
|
||||
PaneTreeWrapper paneNode = new PaneTreeWrapper();
|
||||
paneNode.Checked = true;
|
||||
paneNode.Text = pane.Name;
|
||||
paneNode.Tag = pane;
|
||||
paneNode.Checked = true;
|
||||
|
||||
string imageKey = "";
|
||||
if (pane is BFLYT.WND1) imageKey = "WindowPane";
|
||||
|
@ -183,7 +236,67 @@ namespace LayoutBXLYT
|
|||
private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
|
||||
{
|
||||
if (isLoaded)
|
||||
{
|
||||
if (!e.Node.Checked)
|
||||
e.Node.ForeColor = FormThemes.BaseTheme.DisabledItemColor;
|
||||
else
|
||||
e.Node.ForeColor = treeView1.ForeColor;
|
||||
|
||||
OnProperySelected.Invoke("Checked", e);
|
||||
}
|
||||
}
|
||||
|
||||
private void treeView1_MouseClick(object sender, MouseEventArgs e)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
private void TogglePane(object sender, EventArgs e)
|
||||
{
|
||||
TogglePane(treeView1.SelectedNode);
|
||||
}
|
||||
|
||||
private void TogglePane(TreeNode node)
|
||||
{
|
||||
if (node == null)
|
||||
return;
|
||||
|
||||
if (node.Checked)
|
||||
node.Checked = false;
|
||||
else
|
||||
node.Checked = true;
|
||||
}
|
||||
|
||||
private void treeView1_KeyDown(object sender, KeyEventArgs e)
|
||||
{
|
||||
var node = treeView1.SelectedNode;
|
||||
if (node == null || node.Tag == null)
|
||||
return;
|
||||
|
||||
if (e.KeyCode == Keys.H && e.Control)
|
||||
{
|
||||
if (node.Tag is BasePane)
|
||||
TogglePane(node);
|
||||
}
|
||||
}
|
||||
|
||||
private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
|
||||
{
|
||||
if (e.Node.Tag == null)
|
||||
return;
|
||||
|
||||
if (e.Button == MouseButtons.Right)
|
||||
{
|
||||
treeView1.SelectedNode = e.Node;
|
||||
|
||||
if (e.Node.Tag is BasePane)
|
||||
{
|
||||
ContexMenu.Items.Clear();
|
||||
ContexMenu.Items.Add(new STToolStipMenuItem("Display Panes", null, TogglePane, Keys.Control | Keys.H));
|
||||
// ContexMenu.Items.Add(new STToolStipMenuItem("Display Children Panes", null, TogglePane, Keys.Control | Keys.H));
|
||||
ContexMenu.Show(Cursor.Position);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
86
File_Format_Library/GUI/BFLYT/LayoutPartsEditor.Designer.cs
generated
Normal file
86
File_Format_Library/GUI/BFLYT/LayoutPartsEditor.Designer.cs
generated
Normal file
|
@ -0,0 +1,86 @@
|
|||
namespace LayoutBXLYT
|
||||
{
|
||||
partial class LayoutPartsEditor
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.listView1 = new System.Windows.Forms.ListView();
|
||||
this.stLabel1 = new Toolbox.Library.Forms.STLabel();
|
||||
this.stButton1 = new Toolbox.Library.Forms.STButton();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// listView1
|
||||
//
|
||||
this.listView1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.listView1.Location = new System.Drawing.Point(12, 25);
|
||||
this.listView1.Name = "listView1";
|
||||
this.listView1.Size = new System.Drawing.Size(357, 104);
|
||||
this.listView1.TabIndex = 0;
|
||||
this.listView1.UseCompatibleStateImageBehavior = false;
|
||||
//
|
||||
// stLabel1
|
||||
//
|
||||
this.stLabel1.AutoSize = true;
|
||||
this.stLabel1.Location = new System.Drawing.Point(12, 9);
|
||||
this.stLabel1.Name = "stLabel1";
|
||||
this.stLabel1.Size = new System.Drawing.Size(74, 13);
|
||||
this.stLabel1.TabIndex = 1;
|
||||
this.stLabel1.Text = "Search Paths:";
|
||||
//
|
||||
// stButton1
|
||||
//
|
||||
this.stButton1.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||
this.stButton1.Location = new System.Drawing.Point(15, 135);
|
||||
this.stButton1.Name = "stButton1";
|
||||
this.stButton1.Size = new System.Drawing.Size(75, 23);
|
||||
this.stButton1.TabIndex = 2;
|
||||
this.stButton1.Text = "Add";
|
||||
this.stButton1.UseVisualStyleBackColor = false;
|
||||
//
|
||||
// LayoutPartsEditor
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.ClientSize = new System.Drawing.Size(381, 431);
|
||||
this.Controls.Add(this.stButton1);
|
||||
this.Controls.Add(this.stLabel1);
|
||||
this.Controls.Add(this.listView1);
|
||||
this.Name = "LayoutPartsEditor";
|
||||
this.Text = "Parts Editor";
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.ListView listView1;
|
||||
private Toolbox.Library.Forms.STLabel stLabel1;
|
||||
private Toolbox.Library.Forms.STButton stButton1;
|
||||
}
|
||||
}
|
28
File_Format_Library/GUI/BFLYT/LayoutPartsEditor.cs
Normal file
28
File_Format_Library/GUI/BFLYT/LayoutPartsEditor.cs
Normal file
|
@ -0,0 +1,28 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
using Toolbox.Library;
|
||||
using Toolbox.Library.Forms;
|
||||
|
||||
namespace LayoutBXLYT
|
||||
{
|
||||
public partial class LayoutPartsEditor : LayoutDocked
|
||||
{
|
||||
public LayoutPartsEditor()
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
listView1.BackColor = FormThemes.BaseTheme.FormBackColor;
|
||||
listView1.ForeColor = FormThemes.BaseTheme.FormForeColor;
|
||||
|
||||
BackColor = FormThemes.BaseTheme.FormBackColor;
|
||||
ForeColor = FormThemes.BaseTheme.FormForeColor;
|
||||
}
|
||||
}
|
||||
}
|
120
File_Format_Library/GUI/BFLYT/LayoutPartsEditor.resx
Normal file
120
File_Format_Library/GUI/BFLYT/LayoutPartsEditor.resx
Normal file
|
@ -0,0 +1,120 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
</root>
|
|
@ -23,6 +23,9 @@ namespace LayoutBXLYT
|
|||
userDataEditor = new UserDataEditor();
|
||||
userDataEditor.Dock = DockStyle.Fill;
|
||||
tabPage2.Controls.Add(userDataEditor);
|
||||
|
||||
BackColor = FormThemes.BaseTheme.FormBackColor;
|
||||
ForeColor = FormThemes.BaseTheme.FormForeColor;
|
||||
}
|
||||
|
||||
public void Reset()
|
||||
|
|
|
@ -95,7 +95,7 @@ namespace LayoutBXLYT
|
|||
GL.Viewport(0, 0, glControl1.Width, glControl1.Height);
|
||||
GL.MatrixMode(MatrixMode.Projection);
|
||||
GL.LoadIdentity();
|
||||
GL.Ortho(0, glControl1.Width, glControl1.Height, 0, -1, 1);
|
||||
GL.Ortho(0, glControl1.Width, glControl1.Height, 0, -1, 100);
|
||||
GL.MatrixMode(MatrixMode.Modelview);
|
||||
GL.LoadIdentity();
|
||||
|
||||
|
@ -123,17 +123,31 @@ namespace LayoutBXLYT
|
|||
glControl1.SwapBuffers();
|
||||
}
|
||||
|
||||
private void RenderPanes(BasePane pane, bool isRoot, byte parentAlpha)
|
||||
private void RenderPanes(BasePane pane, bool isRoot, byte parentAlpha, BasePane partPane = null)
|
||||
{
|
||||
if (!pane.DisplayInEditor)
|
||||
return;
|
||||
|
||||
GL.PushMatrix();
|
||||
GL.Translate(pane.Translate.X, pane.Translate.Y, 0);
|
||||
GL.Rotate(pane.Rotate.Z, pane.Rotate.X, pane.Rotate.Y, pane.Rotate.Z);
|
||||
GL.Scale(pane.Scale.X, pane.Scale.Y, 1);
|
||||
|
||||
byte effectiveAlpha = (byte)(parentAlpha == 255 ? pane.Alpha : pane.Alpha / 255);
|
||||
if (partPane != null)
|
||||
{
|
||||
var translate = partPane.Translate + pane.Translate;
|
||||
var scale = partPane.Scale * pane.Scale;
|
||||
var rotate = partPane.Rotate + pane.Rotate;
|
||||
|
||||
GL.Translate(translate.X + translate.X, translate.Y, 0);
|
||||
GL.Rotate(rotate.Z, rotate.X, rotate.Y, rotate.Z);
|
||||
GL.Scale(scale.X, scale.Y, 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
GL.Translate(pane.Translate.X, pane.Translate.Y, 0);
|
||||
GL.Rotate(pane.Rotate.Z, pane.Rotate.X, pane.Rotate.Y, pane.Rotate.Z);
|
||||
GL.Scale(pane.Scale.X, pane.Scale.Y, 1);
|
||||
}
|
||||
|
||||
byte effectiveAlpha = (byte)(parentAlpha == 255 ? pane.Alpha : (pane.Alpha * parentAlpha) / 255);
|
||||
|
||||
if (!isRoot)
|
||||
{
|
||||
|
@ -143,19 +157,24 @@ namespace LayoutBXLYT
|
|||
DrawPicturePane((BCLYT.PIC1)pane, effectiveAlpha);
|
||||
else if (pane is BRLYT.PIC1)
|
||||
DrawPicturePane((BRLYT.PIC1)pane, effectiveAlpha);
|
||||
else if (pane is BFLYT.PRT1)
|
||||
DrawPartsPane((BFLYT.PRT1)pane, effectiveAlpha);
|
||||
else if (pane is BFLYT.PAN1)
|
||||
DrawDefaultPane((BFLYT.PAN1)pane);
|
||||
else if (pane is BCLYT.PAN1)
|
||||
DrawDefaultPane((BCLYT.PAN1)pane);
|
||||
else if (pane is BRLYT.PAN1)
|
||||
DrawDefaultPane((BRLYT.PAN1)pane);
|
||||
|
||||
// else if (pane is BFLYT.WND1)
|
||||
// DrawWindowPane((BFLYT.WND1)pane, effectiveAlpha);
|
||||
}
|
||||
else
|
||||
isRoot = false;
|
||||
|
||||
byte childAlpha = pane.InfluenceAlpha ? effectiveAlpha : byte.MaxValue;
|
||||
foreach (var childPane in pane.Childern)
|
||||
RenderPanes(childPane, isRoot, childAlpha);
|
||||
RenderPanes(childPane, isRoot, childAlpha, partPane);
|
||||
|
||||
GL.PopMatrix();
|
||||
}
|
||||
|
@ -220,6 +239,47 @@ namespace LayoutBXLYT
|
|||
DrawRectangle(pane.CreateRectangle(), TexCoords, Colors);
|
||||
}
|
||||
|
||||
private void DrawPartsPane(BFLYT.PRT1 pane, byte effectiveAlpha)
|
||||
{
|
||||
pane.UpdateTextureData(this.Textures);
|
||||
var partPane = pane.GetExternalPane();
|
||||
if (partPane != null)
|
||||
{
|
||||
RenderPanes(partPane, false, effectiveAlpha);
|
||||
}
|
||||
else
|
||||
DrawDefaultPane(pane);
|
||||
|
||||
if (pane.Properties != null)
|
||||
{
|
||||
foreach (var prop in pane.Properties)
|
||||
{
|
||||
if (prop.Property != null)
|
||||
RenderPanes(prop.Property, false, effectiveAlpha);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void DrawWindowPane(BFLYT.WND1 pane, byte effectiveAlpha)
|
||||
{
|
||||
float frameLeft = 0;
|
||||
float frameTop = 0;
|
||||
float frameRight = 0;
|
||||
float frameBottom = 0;
|
||||
if (pane.FrameCount == 1)
|
||||
{
|
||||
|
||||
}
|
||||
else if (pane.FrameCount == 4)
|
||||
{
|
||||
|
||||
}
|
||||
else if (pane.FrameCount == 8)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
private void DrawPicturePane(BCLYT.PIC1 pane, byte effectiveAlpha)
|
||||
{
|
||||
Vector2[] TexCoords = new Vector2[] {
|
||||
|
@ -391,6 +451,16 @@ namespace LayoutBXLYT
|
|||
GL.TexCoord2(texCoords[3]);
|
||||
GL.Vertex2(rect.LeftPoint, rect.TopPoint);
|
||||
GL.End();
|
||||
|
||||
//Draw outline
|
||||
GL.Begin(PrimitiveType.LineLoop);
|
||||
GL.LineWidth(3);
|
||||
GL.Color4(colors[0]);
|
||||
GL.Vertex2(rect.LeftPoint, rect.BottomPoint);
|
||||
GL.Vertex2(rect.RightPoint, rect.BottomPoint);
|
||||
GL.Vertex2(rect.RightPoint, rect.TopPoint);
|
||||
GL.Vertex2(rect.LeftPoint, rect.TopPoint);
|
||||
GL.End();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
114
File_Format_Library/GUI/BFLYT/Textbox.cs
Normal file
114
File_Format_Library/GUI/BFLYT/Textbox.cs
Normal file
|
@ -0,0 +1,114 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Drawing;
|
||||
using System.Drawing.Text;
|
||||
using System.Drawing.Drawing2D;
|
||||
using OpenTK;
|
||||
using OpenTK.Graphics.OpenGL;
|
||||
using OpenTK.Input;
|
||||
using System.Diagnostics;
|
||||
|
||||
namespace LayoutBXLYT
|
||||
{
|
||||
public class Textbox
|
||||
{
|
||||
public int GlyphsPerLine = 16;
|
||||
public int GlyphLineCount = 16;
|
||||
public int GlyphWidth = 11;
|
||||
public int GlyphHeight = 22;
|
||||
|
||||
public int CharXSpacing = 11;
|
||||
|
||||
public int AtlasOffsetX = -3, AtlassOffsetY = -1;
|
||||
public int FontSize = 14;
|
||||
public bool BitmapFont = false;
|
||||
public string FromFile; //= "joystix monospace.ttf";
|
||||
public string FontName = "Consolas";
|
||||
|
||||
public Textbox()
|
||||
{
|
||||
GenerateFontImage();
|
||||
}
|
||||
|
||||
void GenerateFontImage()
|
||||
{
|
||||
int bitmapWidth = GlyphsPerLine * GlyphWidth;
|
||||
int bitmapHeight = GlyphLineCount * GlyphHeight;
|
||||
|
||||
using (Bitmap bitmap = new Bitmap(bitmapWidth, bitmapHeight, System.Drawing.Imaging.PixelFormat.Format32bppArgb))
|
||||
{
|
||||
Font font;
|
||||
if (!String.IsNullOrWhiteSpace(FromFile))
|
||||
{
|
||||
var collection = new PrivateFontCollection();
|
||||
collection.AddFontFile(FromFile);
|
||||
var fontFamily = new FontFamily(Path.GetFileNameWithoutExtension(FromFile), collection);
|
||||
font = new Font(fontFamily, FontSize);
|
||||
}
|
||||
else
|
||||
{
|
||||
font = new Font(new FontFamily(FontName), FontSize);
|
||||
}
|
||||
|
||||
using (var g = Graphics.FromImage(bitmap))
|
||||
{
|
||||
if (BitmapFont)
|
||||
{
|
||||
g.SmoothingMode = SmoothingMode.None;
|
||||
g.TextRenderingHint = TextRenderingHint.SingleBitPerPixel;
|
||||
}
|
||||
else
|
||||
{
|
||||
g.SmoothingMode = SmoothingMode.HighQuality;
|
||||
g.TextRenderingHint = TextRenderingHint.AntiAliasGridFit;
|
||||
//g.TextRenderingHint = TextRenderingHint.ClearTypeGridFit;
|
||||
}
|
||||
|
||||
for (int p = 0; p < GlyphLineCount; p++)
|
||||
{
|
||||
for (int n = 0; n < GlyphsPerLine; n++)
|
||||
{
|
||||
char c = (char)(n + p * GlyphsPerLine);
|
||||
g.DrawString(c.ToString(), font, Brushes.White,
|
||||
n * GlyphWidth + AtlasOffsetX, p * GlyphHeight + AtlassOffsetY);
|
||||
}
|
||||
}
|
||||
}
|
||||
// bitmap.Save(FontBitmapFilename);
|
||||
}
|
||||
// Process.Start(FontBitmapFilename);
|
||||
}
|
||||
|
||||
int TextureWidth;
|
||||
int TextureHeight;
|
||||
|
||||
public void DrawText(int x, int y, string text)
|
||||
{
|
||||
GL.Begin(PrimitiveType.Quads);
|
||||
|
||||
float u_step = (float)GlyphWidth / (float)TextureWidth;
|
||||
float v_step = (float)GlyphHeight / (float)TextureHeight;
|
||||
|
||||
for (int n = 0; n < text.Length; n++)
|
||||
{
|
||||
char idx = text[n];
|
||||
float u = (float)(idx % GlyphsPerLine) * u_step;
|
||||
float v = (float)(idx / GlyphsPerLine) * v_step;
|
||||
|
||||
GL.TexCoord2(u, v);
|
||||
GL.Vertex2(x, y);
|
||||
GL.TexCoord2(u + u_step, v);
|
||||
GL.Vertex2(x + GlyphWidth, y);
|
||||
GL.TexCoord2(u + u_step, v + v_step);
|
||||
GL.Vertex2(x + GlyphWidth, y + GlyphHeight);
|
||||
GL.TexCoord2(u, v + v_step);
|
||||
GL.Vertex2(x, y + GlyphHeight);
|
||||
|
||||
x += CharXSpacing;
|
||||
}
|
||||
|
||||
GL.End();
|
||||
}
|
||||
}
|
||||
}
|
109
Switch_Toolbox_Library/Forms/Dialogs/ColorSelectorDropdown.Designer.cs
generated
Normal file
109
Switch_Toolbox_Library/Forms/Dialogs/ColorSelectorDropdown.Designer.cs
generated
Normal file
|
@ -0,0 +1,109 @@
|
|||
namespace Toolbox.Library.Forms
|
||||
{
|
||||
partial class ColorSelectorDropdown
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Component Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ColorSelectorDropdown));
|
||||
this.colorSelector1 = new Toolbox.Library.Forms.ColorSelector();
|
||||
this.pictureBox1 = new System.Windows.Forms.PictureBox();
|
||||
this.pictureBox2 = new System.Windows.Forms.PictureBox();
|
||||
this.pictureBoxCustom1 = new Toolbox.Library.Forms.PictureBoxCustom();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureBoxCustom1)).BeginInit();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// colorSelector1
|
||||
//
|
||||
this.colorSelector1.Alpha = 0;
|
||||
this.colorSelector1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
|
||||
| System.Windows.Forms.AnchorStyles.Left)));
|
||||
this.colorSelector1.Color = System.Drawing.Color.Empty;
|
||||
this.colorSelector1.Color8 = null;
|
||||
this.colorSelector1.DisplayAlpha = true;
|
||||
this.colorSelector1.DisplayColor = true;
|
||||
this.colorSelector1.Location = new System.Drawing.Point(3, 3);
|
||||
this.colorSelector1.Name = "colorSelector1";
|
||||
this.colorSelector1.Size = new System.Drawing.Size(245, 243);
|
||||
this.colorSelector1.TabIndex = 0;
|
||||
this.colorSelector1.ColorChanged += new System.EventHandler(this.colorSelector1_ColorChanged);
|
||||
//
|
||||
// pictureBox1
|
||||
//
|
||||
this.pictureBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.pictureBox1.Location = new System.Drawing.Point(254, 3);
|
||||
this.pictureBox1.Name = "pictureBox1";
|
||||
this.pictureBox1.Size = new System.Drawing.Size(30, 30);
|
||||
this.pictureBox1.TabIndex = 1;
|
||||
this.pictureBox1.TabStop = false;
|
||||
//
|
||||
// pictureBox2
|
||||
//
|
||||
this.pictureBox2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.pictureBox2.Location = new System.Drawing.Point(254, 39);
|
||||
this.pictureBox2.Name = "pictureBox2";
|
||||
this.pictureBox2.Size = new System.Drawing.Size(30, 30);
|
||||
this.pictureBox2.TabIndex = 2;
|
||||
this.pictureBox2.TabStop = false;
|
||||
//
|
||||
// pictureBoxCustom1
|
||||
//
|
||||
this.pictureBoxCustom1.BackColor = System.Drawing.Color.Transparent;
|
||||
this.pictureBoxCustom1.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("pictureBoxCustom1.BackgroundImage")));
|
||||
this.pictureBoxCustom1.Location = new System.Drawing.Point(254, 75);
|
||||
this.pictureBoxCustom1.Name = "pictureBoxCustom1";
|
||||
this.pictureBoxCustom1.Size = new System.Drawing.Size(30, 30);
|
||||
this.pictureBoxCustom1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
|
||||
this.pictureBoxCustom1.TabIndex = 3;
|
||||
this.pictureBoxCustom1.TabStop = false;
|
||||
//
|
||||
// ColorSelectorDropdown
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.Controls.Add(this.pictureBoxCustom1);
|
||||
this.Controls.Add(this.pictureBox2);
|
||||
this.Controls.Add(this.pictureBox1);
|
||||
this.Controls.Add(this.colorSelector1);
|
||||
this.Name = "ColorSelectorDropdown";
|
||||
this.Size = new System.Drawing.Size(292, 244);
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureBoxCustom1)).EndInit();
|
||||
this.ResumeLayout(false);
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private ColorSelector colorSelector1;
|
||||
private System.Windows.Forms.PictureBox pictureBox1;
|
||||
private System.Windows.Forms.PictureBox pictureBox2;
|
||||
private PictureBoxCustom pictureBoxCustom1;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,52 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Drawing;
|
||||
using System.Data;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace Toolbox.Library.Forms
|
||||
{
|
||||
public partial class ColorSelectorDropdown : STUserControl
|
||||
{
|
||||
public STColor8 Color8
|
||||
{
|
||||
get { return colorSelector1.Color8; }
|
||||
set { colorSelector1.Color8 = value; }
|
||||
}
|
||||
|
||||
public Color Color
|
||||
{
|
||||
get { return colorSelector1.Color; }
|
||||
set { colorSelector1.Color = value; }
|
||||
}
|
||||
|
||||
public Color AlphaColor
|
||||
{
|
||||
get { return colorSelector1.AlphaColor; }
|
||||
}
|
||||
|
||||
public int Alpha
|
||||
{
|
||||
get { return colorSelector1.Alpha; }
|
||||
set { colorSelector1.Alpha = value; }
|
||||
}
|
||||
|
||||
public ColorSelectorDropdown()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
private void colorSelector1_ColorChanged(object sender, EventArgs e)
|
||||
{
|
||||
pictureBox1.BackColor = colorSelector1.Color;
|
||||
pictureBox2.BackColor = colorSelector1.AlphaColor;
|
||||
|
||||
var fullColor = Color.FromArgb(colorSelector1.Alpha, colorSelector1.Color);
|
||||
pictureBoxCustom1.Image = BitmapExtension.FillColor(30,30, fullColor);
|
||||
}
|
||||
}
|
||||
}
|
328
Switch_Toolbox_Library/Forms/Dialogs/ColorSelectorDropdown.resx
Normal file
328
Switch_Toolbox_Library/Forms/Dialogs/ColorSelectorDropdown.resx
Normal file
|
@ -0,0 +1,328 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="pictureBoxCustom1.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAAlgAAAJYCAMAAACJuGjuAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6
|
||||
JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAADAFBMVEXMzMzNzc3Ozs7Pz8/Q0NDR0dHS
|
||||
0tLT09PU1NTV1dXW1tbX19fY2NjZ2dna2trb29vc3Nzd3d3e3t7f39/g4ODh4eHi4uLj4+Pk5OTl5eXm
|
||||
5ubn5+fo6Ojp6enq6urr6+vs7Ozt7e3u7u7v7+/w8PDx8fHy8vLz8/P09PT19fX29vb39/f4+Pj5+fn6
|
||||
+vr7+/v8/Pz9/f3+/v7///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
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
|
||||
</value>
|
||||
</data>
|
||||
</root>
|
|
@ -149,9 +149,19 @@ namespace Toolbox.Library.Forms
|
|||
|
||||
FillEditor("");
|
||||
}
|
||||
|
||||
private Color BACK_COLOR = Color.FromArgb(30, 30, 30);
|
||||
private Color FORE_COLOR = Color.White;
|
||||
|
||||
public void AddContextMenu(string text, EventHandler handler)
|
||||
{
|
||||
foreach (ToolStripItem item in stContextMenuStrip1.Items)
|
||||
if (item.Text == text)
|
||||
return;
|
||||
|
||||
stContextMenuStrip1.Items.Add(text, null, handler);
|
||||
}
|
||||
|
||||
public string GetText()
|
||||
{
|
||||
return scintilla1.Text;
|
||||
|
|
|
@ -160,7 +160,9 @@ namespace Toolbox.Library
|
|||
}
|
||||
}
|
||||
|
||||
FileList.Add(Tuple.Create(tempf, $"{targetDirectory}/{fileName}"));
|
||||
Console.WriteLine($"{tempf} {targetDirectory} {fileName}");
|
||||
|
||||
FileList.Add(Tuple.Create(fileName, $"{targetDirectory}/{fileName}"));
|
||||
}
|
||||
|
||||
string[] subdirectoryEntries = Directory.GetDirectories(targetDirectory);
|
||||
|
|
|
@ -29,7 +29,7 @@ namespace Toolbox.Library.IO
|
|||
if (frmsvr == null)
|
||||
return null;
|
||||
|
||||
var control = new ColorSelector();
|
||||
var control = new ColorSelectorDropdown();
|
||||
|
||||
Color color = Color.White;
|
||||
if (value is STColor8)
|
||||
|
|
|
@ -79,9 +79,7 @@ namespace Toolbox.Library
|
|||
[Browsable(false)]
|
||||
public virtual IFileFormat OpenFile()
|
||||
{
|
||||
if (FileFormat != null &&
|
||||
FileFormat.IFileInfo != null &&
|
||||
FileFormat.IFileInfo.ArchiveParent != null)
|
||||
if (FileFormat != null)
|
||||
return FileFormat;
|
||||
|
||||
if (FileDataStream != null)
|
||||
|
|
|
@ -360,6 +360,16 @@ namespace Toolbox.Library.Properties {
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
public static System.Drawing.Bitmap Font {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("Font", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
|
|
|
@ -382,4 +382,7 @@
|
|||
<data name="arrowMinimize" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\arrowMinimize .png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="Font" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\Font.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
</root>
|
BIN
Switch_Toolbox_Library/Resources/Font.png
Normal file
BIN
Switch_Toolbox_Library/Resources/Font.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3 KiB |
|
@ -240,6 +240,12 @@
|
|||
<Compile Include="Forms\ColorSelector.cs">
|
||||
<SubType>UserControl</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Forms\Dialogs\ColorSelectorDropdown.cs">
|
||||
<SubType>UserControl</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Forms\Dialogs\ColorSelectorDropdown.Designer.cs">
|
||||
<DependentUpon>ColorSelectorDropdown.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Forms\Dialogs\STColorDialog.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
|
@ -891,6 +897,9 @@
|
|||
<EmbeddedResource Include="Forms\Custom\STTextBox.resx">
|
||||
<DependentUpon>STTextBox.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Forms\Dialogs\ColorSelectorDropdown.resx">
|
||||
<DependentUpon>ColorSelectorDropdown.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Forms\Dialogs\ExportModelSettings.resx">
|
||||
<DependentUpon>ExportModelSettings.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
|
@ -1277,6 +1286,7 @@
|
|||
<ItemGroup>
|
||||
<Folder Include="FileFormats\Compression\" />
|
||||
<Folder Include="FileFormats\DAE\COLLADA\" />
|
||||
<Folder Include="FileFormats\DAE\Custom\" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="Resources\boneWeightGradient.png" />
|
||||
|
@ -1350,6 +1360,9 @@
|
|||
<ItemGroup>
|
||||
<None Include="Resources\Layout\WindowPane.png" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="Resources\Font.png" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||
<PropertyGroup>
|
||||
|
|
Loading…
Reference in a new issue