1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-08 11:38:21 +02:00
Beef/MemProfiler/Board.bf
2019-08-23 11:56:54 -07:00

123 lines
2.9 KiB
Beef

using System;
using Beefy;
using Beefy.gfx;
using Beefy.widgets;
using Beefy.geom;
using System.Collections.Generic;
using Beefy.utils;
using System.Diagnostics;
using Beefy.theme.dark;
using Beefy.events;
namespace MemProfiler
{
class Board : Widget
{
DarkListView mListView;
DarkButton mGetButton;
public this()
{
mListView = new DarkListView();
AddWidget(mListView);
mListView.AddColumn(200, "Name");
mListView.AddColumn(200, "Self");
mListView.AddColumn(200, "Total");
mListView.InitScrollbars(false, true);
mGetButton = (DarkButton)DarkTheme.sDarkTheme.CreateButton(this, "Get", 0, 0, 0, 0);
mGetButton.mMouseClickHandler.Add(new (evt) => { GetData(); });
}
public override void Resize(float x, float y, float width, float height)
{
base.Resize(x, y, width, height);
mListView.Resize(x, y, width, height - 20);
mGetButton.Resize(20, mHeight - 20, 128, 20);
}
public override void Draw(Graphics g)
{
base.Draw(g);
g.DrawBox(DarkTheme.sDarkTheme.GetImage(DarkTheme.ImageIdx.Bkg), 0, 0, mWidth, mHeight);
g.SetFont(DarkTheme.sDarkTheme.mSmallFont);
g.DrawString(StackStringFormat!("FPS: {0}", gApp.mLastFPS), mWidth - 128, mHeight - 18);
g.FillRect(mUpdateCnt % 200 + 200, mHeight - 2, 2, 2);
}
void ValueClicked(MouseEvent theEvent)
{
DarkListViewItem clickedItem = (DarkListViewItem)theEvent.mSender;
DarkListViewItem item = (DarkListViewItem)clickedItem.GetSubItem(0);
mListView.GetRoot().SelectItemExclusively(item);
mListView.SetFocus();
}
void GetData()
{
//const char* cmd = "Get";
//DWORD bytesRead = 0;
mListView.GetRoot().Clear();
String pipeName = scope String();
pipeName.FormatInto(@"\\.\pipe\HeapDbg_{0}", gApp.mProcessInformation.mProcessId);
String cmd = "Get";
char8[] charData = new char8[16*1024*1024];
defer delete charData;
int32 bytesRead = 0;
if (Windows.CallNamedPipeA(pipeName, (void*)cmd, (int32)cmd.Length, (void*)charData.CArray(), (int32)charData.Count, &bytesRead, 0))
{
String data = scope String();
data.Reference(charData.CArray(), bytesRead, charData.Count);
ListViewItem curItem = mListView.GetRoot();
for (var lineView in data.Split('\n'))
{
String lineViewStr = scope String(lineView);
if (lineViewStr == "-")
{
curItem = curItem.mParentItem;
}
else
{
var childItem = curItem.CreateChildItem();
childItem.mMouseDownHandler.Add(new => ValueClicked);
int32 idx = 0;
for (var dataStr in lineViewStr.Split('\t'))
{
if (idx == 0)
childItem.Label = scope String(dataStr);
else
{
var subItem = childItem.CreateSubItem(idx);
subItem.Label = scope String(dataStr);
subItem.mMouseDownHandler.Add(new => ValueClicked);
}
idx++;
}
curItem = childItem;
}
}
//tree->InsertItem()
}
}
}
}