2025-10-04 20:51:01 +02:00

163 lines
5.4 KiB
C#

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Numerics;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using ImGuiNET;
using skyscraper5.Skyscraper.Scraper;
using skyscraper8.Skyscraper.Plugins;
namespace SDL2Demo.Forms
{
/*internal class LogWindow : PluginAppenderEx, IRenderable
{
public LogWindow()
{
logEntries = new LinkedList<string>();
clipperMemory = Marshal.AllocHGlobal(1024);
flags = Int32.MaxValue;
}
private string GetFullLogAsString()
{
StringWriter sw = new StringWriter();
LinkedListNode<string> logEntriesFirst = logEntries.First;
while (true)
{
if (logEntriesFirst.Next == null)
break;
sw.WriteLine(logEntriesFirst.Value);
logEntriesFirst = logEntriesFirst.Next;
}
return sw.ToString();
}
private IntPtr clipperMemory;
private Vector2 zero;
private LinkedList<string> logEntries;
private int flags;
private Vector2 windowSize;
private bool isOpen;
public bool IsOpen
{
get => isOpen;
set
{
logEntries = new LinkedList<string>();
isOpen = value;
}
}
public void Render()
{
if (!IsOpen)
return;
if (windowSize == Vector2.Zero)
windowSize = new Vector2(0.0f, ImGui.GetFontSize() * 12.0f);
ImGui.SetNextWindowSize(windowSize, ImGuiCond.FirstUseEver);
if (!ImGui.Begin("skyscraper5 Debug Log", ref isOpen))
{
ImGui.End();
return;
}
ImGui.AlignTextToFramePadding();
ImGui.Text("Log events:");
ImGui.SameLine();
ImGui.CheckboxFlags("All", ref flags, Int32.MaxValue);
ImGui.SameLine(); ImGui.CheckboxFlags("UI", ref flags, 1);
ImGui.SameLine(); ImGui.CheckboxFlags("Scraper", ref flags, 2);
ImGui.SameLine(); ImGui.CheckboxFlags("Seconds", ref flags, 4);
ImGui.SameLine(); ImGui.CheckboxFlags("Job", ref flags, 8);
//ImGui.SameLine(); ImGui.CheckboxFlags("???16", ref flags, 16);
//ImGui.SameLine(); ImGui.CheckboxFlags("???32", ref flags, 32);
//ImGui.SameLine(); ImGui.CheckboxFlags("???32", ref flags, 64);
//ImGui.SameLine(); ImGui.CheckboxFlags("???32", ref flags, 128);
//ImGui.SameLine(); ImGui.CheckboxFlags("???32", ref flags, 256);
if (ImGui.SmallButton("Clear"))
{
logEntries = new LinkedList<string>();
}
ImGui.SameLine();
if (ImGui.SmallButton("Copy"))
ImGui.SetClipboardText(GetFullLogAsString());
ImGui.BeginChild("##log", zero, true, ImGuiWindowFlags.AlwaysVerticalScrollbar | ImGuiWindowFlags.AlwaysHorizontalScrollbar);
ImGuiListClipperPtr clipper = new ImGuiListClipperPtr(clipperMemory);
clipper.Begin(logEntries.Count);
while (clipper.Step())
for (int line_no = clipper.DisplayStart; line_no < clipper.DisplayEnd; line_no++)
{
string line = GetLine(line_no);
ImGui.TextUnformatted(line);
}
if (ImGui.GetScrollY() >= ImGui.GetScrollMaxY())
ImGui.SetScrollHereY(1.0f);
ImGui.EndChild();
ImGui.End();
}
private string GetLine(int lineNo)
{
LinkedListNode<string> logEntriesFirst = logEntries.First;
if (lineNo == 0)
return logEntriesFirst.Value;
try
{
for (int i = 1; i < lineNo; i++)
{
if (logEntriesFirst == null)
return "";
if (logEntriesFirst.Next == null)
return "";
logEntriesFirst = logEntriesFirst.Next;
}
}
catch (NullReferenceException e)
{
return "";
}
return logEntriesFirst.Value;
}
private const bool LOG_TO_DEBUG = false;
private const bool LOG_TO_TRACE = false;
public void Log(string toString, int flags = 1)
{
lock (logEntries)
{
while (logEntries.Count > 9000)
{
logEntries.RemoveFirst();
}
if (isOpen)
{
if (((this.flags) & (flags)) != 0)
{
logEntries.AddLast(toString);
if (LOG_TO_DEBUG)
Debug.WriteLine(toString);
if (LOG_TO_TRACE)
Trace.WriteLine(toString);
}
}
}
}
public ulong NumEvents => (uint)logEntries.Count;
public override void Log(DateTime mappedTime, PluginLogLevel mappedLevel, string? mappedLoggerName, string? mappedMessage)
{
Log(String.Format("{0} {1} [{2}] {3}", mappedTime.ToShortDateString(), mappedTime.ToShortTimeString(), mappedLoggerName, mappedMessage));
}
}*/
}