mirror of
https://github.com/sampletext32/ParkanPlayground.git
synced 2025-06-18 23:59:46 +03:00
create NResUI
This commit is contained in:
127
NResUI/ImGuiUI/ExplorerPanel.cs
Normal file
127
NResUI/ImGuiUI/ExplorerPanel.cs
Normal file
@ -0,0 +1,127 @@
|
||||
using ImGuiNET;
|
||||
using NResUI.Abstractions;
|
||||
using NResUI.Models;
|
||||
|
||||
namespace NResUI.ImGuiUI;
|
||||
|
||||
public class ExplorerPanel : IImGuiPanel
|
||||
{
|
||||
private readonly ExplorerViewModel _viewModel;
|
||||
|
||||
public ExplorerPanel(ExplorerViewModel viewModel)
|
||||
{
|
||||
_viewModel = viewModel;
|
||||
}
|
||||
|
||||
public void OnImGuiRender()
|
||||
{
|
||||
if (ImGui.Begin("Explorer"))
|
||||
{
|
||||
if (!_viewModel.HasFile)
|
||||
{
|
||||
ImGui.Text("No NRes is opened");
|
||||
}
|
||||
else
|
||||
{
|
||||
if (_viewModel.Error != null)
|
||||
{
|
||||
ImGui.Text(_viewModel.Error);
|
||||
}
|
||||
|
||||
if (_viewModel.Archive is not null)
|
||||
{
|
||||
ImGui.Text(_viewModel.Path);
|
||||
|
||||
ImGui.Text("Header: ");
|
||||
ImGui.SameLine();
|
||||
ImGui.Text(_viewModel.Archive.Header.NRes);
|
||||
ImGui.Text("Version: ");
|
||||
ImGui.SameLine();
|
||||
ImGui.Text(_viewModel.Archive.Header.Version.ToString());
|
||||
ImGui.Text("File Count: ");
|
||||
ImGui.SameLine();
|
||||
ImGui.Text(_viewModel.Archive.Header.FileCount.ToString());
|
||||
ImGui.Text("Total File Length: ");
|
||||
ImGui.SameLine();
|
||||
ImGui.Text(_viewModel.Archive.Header.TotalFileLengthBytes.ToString());
|
||||
|
||||
|
||||
if (ImGui.BeginTable("content", 11))
|
||||
{
|
||||
ImGui.TableSetupColumn("Тип файла");
|
||||
ImGui.TableSetupColumn("Magic1");
|
||||
ImGui.TableSetupColumn("Длина файла в байтах");
|
||||
ImGui.TableSetupColumn("Magic2");
|
||||
ImGui.TableSetupColumn("Имя файла");
|
||||
ImGui.TableSetupColumn("Magic3");
|
||||
ImGui.TableSetupColumn("Magic4");
|
||||
ImGui.TableSetupColumn("Magic5");
|
||||
ImGui.TableSetupColumn("Magic6");
|
||||
ImGui.TableSetupColumn("Смещение в байтах");
|
||||
ImGui.TableSetupColumn("Индекс в файле");
|
||||
|
||||
ImGui.TableHeadersRow();
|
||||
|
||||
for (int i = 0; i < _viewModel.Archive.Files.Count; i++)
|
||||
{
|
||||
ImGui.TableNextRow();
|
||||
ImGui.TableNextColumn();
|
||||
ImGui.Text(_viewModel.Archive.Files[i].FileType);
|
||||
ImGui.TableNextColumn();
|
||||
ImGui.Text(
|
||||
_viewModel.Archive.Files[i]
|
||||
.Magic1.ToString()
|
||||
);
|
||||
ImGui.TableNextColumn();
|
||||
ImGui.Text(
|
||||
_viewModel.Archive.Files[i]
|
||||
.FileLength.ToString()
|
||||
);
|
||||
ImGui.TableNextColumn();
|
||||
ImGui.Text(
|
||||
_viewModel.Archive.Files[i]
|
||||
.Magic2.ToString()
|
||||
);
|
||||
ImGui.TableNextColumn();
|
||||
ImGui.Text(_viewModel.Archive.Files[i].FileName);
|
||||
ImGui.TableNextColumn();
|
||||
ImGui.Text(
|
||||
_viewModel.Archive.Files[i]
|
||||
.Magic3.ToString()
|
||||
);
|
||||
ImGui.TableNextColumn();
|
||||
ImGui.Text(
|
||||
_viewModel.Archive.Files[i]
|
||||
.Magic4.ToString()
|
||||
);
|
||||
ImGui.TableNextColumn();
|
||||
ImGui.Text(
|
||||
_viewModel.Archive.Files[i]
|
||||
.Magic5.ToString()
|
||||
);
|
||||
ImGui.TableNextColumn();
|
||||
ImGui.Text(
|
||||
_viewModel.Archive.Files[i]
|
||||
.Magic6.ToString()
|
||||
);
|
||||
ImGui.TableNextColumn();
|
||||
ImGui.Text(
|
||||
_viewModel.Archive.Files[i]
|
||||
.OffsetInFile.ToString()
|
||||
);
|
||||
ImGui.TableNextColumn();
|
||||
ImGui.Text(
|
||||
_viewModel.Archive.Files[i]
|
||||
.Index.ToString()
|
||||
);
|
||||
}
|
||||
|
||||
ImGui.EndTable();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ImGui.End();
|
||||
}
|
||||
}
|
||||
}
|
39
NResUI/ImGuiUI/ImGuiModalPanel.cs
Normal file
39
NResUI/ImGuiUI/ImGuiModalPanel.cs
Normal file
@ -0,0 +1,39 @@
|
||||
using System.Numerics;
|
||||
using ImGuiNET;
|
||||
using NResUI.Abstractions;
|
||||
|
||||
namespace NResUI.ImGuiUI;
|
||||
|
||||
public abstract class ImGuiModalPanel : IImGuiPanel
|
||||
{
|
||||
protected abstract string ImGuiId { get; }
|
||||
|
||||
private bool _shouldOpen = false;
|
||||
|
||||
public virtual void Open()
|
||||
{
|
||||
_shouldOpen = true;
|
||||
}
|
||||
|
||||
protected abstract void OnImGuiRenderContent();
|
||||
|
||||
public void OnImGuiRender()
|
||||
{
|
||||
// this is a ImGui stack fix. Because menubars and some other controls use their separate stack context,
|
||||
// The panel gets rendered on it's own, at the root of the stack, and with _shouldOpen we control, if the panel should open this frame.
|
||||
if (_shouldOpen)
|
||||
{
|
||||
ImGui.OpenPopup(ImGuiId, ImGuiPopupFlags.AnyPopupLevel);
|
||||
_shouldOpen = false;
|
||||
}
|
||||
|
||||
ImGui.SetNextWindowSize(new Vector2(600, 400));
|
||||
|
||||
if (ImGui.BeginPopup(ImGuiId, ImGuiWindowFlags.NoResize))
|
||||
{
|
||||
OnImGuiRenderContent();
|
||||
|
||||
ImGui.EndPopup();
|
||||
}
|
||||
}
|
||||
}
|
108
NResUI/ImGuiUI/MainMenuBar.cs
Normal file
108
NResUI/ImGuiUI/MainMenuBar.cs
Normal file
@ -0,0 +1,108 @@
|
||||
using System.Numerics;
|
||||
using ImGuiNET;
|
||||
using NativeFileDialogSharp;
|
||||
using NResLib;
|
||||
using NResUI.Abstractions;
|
||||
using NResUI.Models;
|
||||
|
||||
namespace NResUI.ImGuiUI
|
||||
{
|
||||
public class MainMenuBar : IImGuiPanel
|
||||
{
|
||||
private readonly ExplorerViewModel _explorerViewModel;
|
||||
|
||||
public MainMenuBar(ExplorerViewModel explorerViewModel)
|
||||
{
|
||||
_explorerViewModel = explorerViewModel;
|
||||
}
|
||||
|
||||
public void OnImGuiRender()
|
||||
{
|
||||
if (ImGui.BeginMenuBar())
|
||||
{
|
||||
if (ImGui.BeginMenu("File"))
|
||||
{
|
||||
if (ImGui.MenuItem("Open NRes"))
|
||||
{
|
||||
var result = Dialog.FileOpen();
|
||||
|
||||
if (result.IsOk)
|
||||
{
|
||||
var path = result.Path;
|
||||
|
||||
var parseResult = NResParser.ReadFile(path);
|
||||
|
||||
_explorerViewModel.SetParseResult(parseResult, path);
|
||||
}
|
||||
}
|
||||
|
||||
if (_explorerViewModel.HasFile)
|
||||
{
|
||||
if (ImGui.MenuItem("Экспортировать"))
|
||||
{
|
||||
var result = Dialog.FolderPicker();
|
||||
|
||||
if (result.IsOk)
|
||||
{
|
||||
var path = result.Path;
|
||||
|
||||
Console.WriteLine(path);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (ImGui.BeginMenu("Open Recent"))
|
||||
{
|
||||
ImGui.EndMenu();
|
||||
}
|
||||
|
||||
if (ImGui.MenuItem("Exit"))
|
||||
{
|
||||
App.Instance.Exit();
|
||||
}
|
||||
|
||||
ImGui.EndMenu();
|
||||
}
|
||||
|
||||
if (ImGui.BeginMenu("Windows"))
|
||||
{
|
||||
if (ImGui.MenuItem("Settings"))
|
||||
{
|
||||
}
|
||||
|
||||
ImGui.EndMenu();
|
||||
}
|
||||
|
||||
ImGui.EndMenuBar();
|
||||
}
|
||||
}
|
||||
|
||||
// This is a direct port of imgui_demo.cpp HelpMarker function
|
||||
|
||||
// https://github.com/ocornut/imgui/blob/master/imgui_demo.cpp#L190
|
||||
|
||||
private void ShowHint(string message)
|
||||
{
|
||||
// ImGui.TextDisabled("(?)");
|
||||
if (ImGui.IsItemHovered())
|
||||
{
|
||||
// Change background transparency
|
||||
ImGui.PushStyleColor(
|
||||
ImGuiCol.PopupBg,
|
||||
new Vector4(
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
0.8f
|
||||
)
|
||||
);
|
||||
ImGui.BeginTooltip();
|
||||
ImGui.PushTextWrapPos(ImGui.GetFontSize() * 35.0f);
|
||||
ImGui.TextUnformatted(message);
|
||||
ImGui.PopTextWrapPos();
|
||||
ImGui.EndTooltip();
|
||||
ImGui.PopStyleColor();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user