mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-17 23:56:05 +02:00
Initial checkin
This commit is contained in:
parent
c74712dad9
commit
078564ac9e
3242 changed files with 1616395 additions and 0 deletions
178
IDE/src/ui/ModulePanel.bf
Normal file
178
IDE/src/ui/ModulePanel.bf
Normal file
|
@ -0,0 +1,178 @@
|
|||
using Beefy.theme.dark;
|
||||
using System;
|
||||
using Beefy.widgets;
|
||||
using Beefy.theme;
|
||||
using System.IO;
|
||||
using Beefy.utils;
|
||||
|
||||
namespace IDE.ui
|
||||
{
|
||||
class ModulePanel : Panel
|
||||
{
|
||||
public IDEListView mListView;
|
||||
bool mModulesDirty = true;
|
||||
|
||||
public this()
|
||||
{
|
||||
mListView = new IDEListView();
|
||||
mListView.InitScrollbars(true, true);
|
||||
mListView.mHorzScrollbar.mPageSize = GS!(100);
|
||||
mListView.mHorzScrollbar.mContentSize = GS!(500);
|
||||
mListView.mVertScrollbar.mPageSize = GS!(100);
|
||||
mListView.mVertScrollbar.mContentSize = GS!(500);
|
||||
mListView.mAutoFocus = true;
|
||||
mListView.mOnLostFocus.Add(new (evt) =>
|
||||
{
|
||||
if (!mShowingRightClickMenu)
|
||||
mListView.GetRoot().SelectItemExclusively(null);
|
||||
});
|
||||
mListView.UpdateScrollbars();
|
||||
|
||||
AddWidget(mListView);
|
||||
|
||||
ListViewColumn column = mListView.AddColumn(GS!(100), "Name");
|
||||
column.mMinWidth = GS!(130);
|
||||
column = mListView.AddColumn(GS!(200), "Path");
|
||||
column = mListView.AddColumn(GS!(200), "Debug Info File");
|
||||
column = mListView.AddColumn(GS!(120), "Version");
|
||||
column = mListView.AddColumn(GS!(200), "Address");
|
||||
column = mListView.AddColumn(GS!(100), "Size");
|
||||
column = mListView.AddColumn(GS!(120), "Timestamp");
|
||||
mListView.mOnItemMouseDown.Add(new => ListViewItemMouseDown);
|
||||
mListView.mOnItemMouseClicked.Add(new => ListViewItemMouseClicked);
|
||||
mListView.mOnKeyDown.Add(new => ListViewKeyDown_ShowMenu);
|
||||
}
|
||||
|
||||
public override void Serialize(StructuredData data)
|
||||
{
|
||||
base.Serialize(data);
|
||||
data.Add("Type", "ModulePanel");
|
||||
}
|
||||
|
||||
public override void FocusForKeyboard()
|
||||
{
|
||||
// Update to allow for populating of list if necessary
|
||||
Update();
|
||||
mListView.SetFocus();
|
||||
if ((mListView.GetRoot().FindFocusedItem() == null) && (mListView.GetRoot().GetChildCount() > 0))
|
||||
{
|
||||
mListView.GetRoot().SelectItemExclusively(mListView.GetRoot().GetChildAtIndex(0));
|
||||
}
|
||||
}
|
||||
|
||||
public void ModulesChanged()
|
||||
{
|
||||
mModulesDirty = true;
|
||||
}
|
||||
|
||||
protected override void ShowRightClickMenu(Widget relWidget, float x, float y)
|
||||
{
|
||||
base.ShowRightClickMenu(relWidget, x, y);
|
||||
|
||||
#if !CLI
|
||||
var root = relWidget as ListViewItem;
|
||||
var listView = root.mListView;
|
||||
if (listView.GetRoot().FindFirstSelectedItem() != null)
|
||||
{
|
||||
Menu menu = new Menu();
|
||||
Menu anItem;
|
||||
anItem = menu.AddItem("Load Symbols...");
|
||||
anItem.mOnMenuItemSelected.Add(new (item) =>
|
||||
{
|
||||
listView.GetRoot().WithSelectedItems(scope (item) =>
|
||||
{
|
||||
var pathItem = item.GetSubItem(1);
|
||||
|
||||
String dir = scope String();
|
||||
Path.GetDirectoryPath(pathItem.Label, dir);
|
||||
IDEUtils.FixFilePath(dir);
|
||||
|
||||
var fileDialog = scope System.IO.OpenFileDialog();
|
||||
fileDialog.ShowReadOnly = false;
|
||||
fileDialog.Title = "Select Debug Info File";
|
||||
fileDialog.Multiselect = false;
|
||||
if (!dir.IsEmpty)
|
||||
fileDialog.InitialDirectory = dir;
|
||||
fileDialog.ValidateNames = true;
|
||||
fileDialog.DefaultExt = ".exe";
|
||||
fileDialog.SetFilter("PDB Debug Unfo (*.pdb)|*.pdb|All files (*.*)|*.*");
|
||||
mWidgetWindow.PreModalChild();
|
||||
if (fileDialog.ShowDialog(gApp.GetActiveWindow()).GetValueOrDefault() == .OK)
|
||||
{
|
||||
var fileNames = fileDialog.FileNames;
|
||||
if (gApp.mDebugger.mIsRunning)
|
||||
{
|
||||
gApp.mDebugger.LoadDebugInfoForModule(scope String(pathItem.Label), fileNames[0]);
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
MenuWidget menuWidget = ThemeFactory.mDefault.CreateMenuWidget(menu);
|
||||
menuWidget.Init(relWidget, x, y);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void UpdateModules()
|
||||
{
|
||||
int idx = 0;
|
||||
if (gApp.mDebugger.mIsRunning)
|
||||
{
|
||||
var modulesInfoStr = scope String();
|
||||
gApp.mDebugger.GetModulesInfo(modulesInfoStr);
|
||||
|
||||
for (let moduleInfoStr in modulesInfoStr.Split('\n'))
|
||||
{
|
||||
if (moduleInfoStr.IsEmpty)
|
||||
continue;
|
||||
|
||||
if (idx < mListView.GetRoot().GetChildCount())
|
||||
{
|
||||
let lvItem = mListView.GetRoot().GetChildAtIndex(idx);
|
||||
int subIdx = 0;
|
||||
for (let moduleStr in moduleInfoStr.Split('\t'))
|
||||
{
|
||||
let subLVItem = (subIdx == 0) ? lvItem : lvItem.GetSubItem(subIdx);
|
||||
subLVItem.Label = moduleStr;
|
||||
subIdx++;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
let lvItem = mListView.GetRoot().CreateChildItem();
|
||||
int subIdx = 0;
|
||||
for (let moduleStr in moduleInfoStr.Split('\t'))
|
||||
{
|
||||
let subLVItem = (subIdx == 0) ? lvItem : lvItem.CreateSubItem(subIdx);
|
||||
subLVItem.Label = moduleStr;
|
||||
subIdx++;
|
||||
}
|
||||
}
|
||||
|
||||
++idx;
|
||||
}
|
||||
}
|
||||
|
||||
while (idx < mListView.GetRoot().GetChildCount())
|
||||
mListView.GetRoot().RemoveChildItemAt(idx);
|
||||
}
|
||||
|
||||
public override void Update()
|
||||
{
|
||||
base.Update();
|
||||
|
||||
if (mModulesDirty)
|
||||
{
|
||||
UpdateModules();
|
||||
mModulesDirty = false;
|
||||
}
|
||||
}
|
||||
|
||||
public override void Resize(float x, float y, float width, float height)
|
||||
{
|
||||
base.Resize(x, y, width, height);
|
||||
mListView.Resize(0, 0, width, height);
|
||||
mListView.ScrollPositionChanged();
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue