mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-19 00:20:25 +02:00
Initial checkin
This commit is contained in:
parent
c74712dad9
commit
078564ac9e
3242 changed files with 1616395 additions and 0 deletions
241
IDE/src/ui/InstalledProjectDialog.bf
Normal file
241
IDE/src/ui/InstalledProjectDialog.bf
Normal file
|
@ -0,0 +1,241 @@
|
|||
using Beefy.theme.dark;
|
||||
using Beefy.widgets;
|
||||
using Beefy.events;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Beefy.gfx;
|
||||
using IDE.Util;
|
||||
using System.IO;
|
||||
|
||||
namespace IDE.ui
|
||||
{
|
||||
class InstalledProjectDialog : IDEDialog
|
||||
{
|
||||
class InstalledProject
|
||||
{
|
||||
public String mName ~ delete _;
|
||||
public String mPath ~ delete _;
|
||||
public VerSpecRecord mVersion;
|
||||
}
|
||||
|
||||
protected IDEListView mProjectList;
|
||||
EditWidget mEditWidget;
|
||||
bool mFilterChanged;
|
||||
List<InstalledProject> mInstalledProjectList = new .() ~ DeleteContainerAndItems!(_);
|
||||
List<InstalledProject> mFilteredList = new .() ~ delete _;
|
||||
public static Dictionary<String, int32> sMRU = new .() ~
|
||||
{
|
||||
for (let key in _.Keys)
|
||||
delete key;
|
||||
delete _;
|
||||
};
|
||||
|
||||
public this()
|
||||
{
|
||||
mWindowFlags = .ClientSized | .TopMost | .Caption | .Border | .SysMenu | .Resizable;
|
||||
|
||||
AddOkCancelButtons(new (evt) => { DoImport(); }, null, 0, 1);
|
||||
//mApplyButton = AddButton("Apply", (evt) => { evt.mCloseDialog = false; ApplyChanges(); });
|
||||
|
||||
Title = "Import Installed Project";
|
||||
|
||||
mButtonBottomMargin = GS!(6);
|
||||
mButtonRightMargin = GS!(6);
|
||||
|
||||
mProjectList = new .();
|
||||
mProjectList.InitScrollbars(false, true);
|
||||
mProjectList.mAllowMultiSelect = false;
|
||||
mProjectList.mOnItemMouseDown.Add(new => ValueMouseDown);
|
||||
|
||||
ListViewColumn column = mProjectList.AddColumn(GS!(200), "Project");
|
||||
column.mMinWidth = GS!(100);
|
||||
column = mProjectList.AddColumn(GS!(200), "Path");
|
||||
|
||||
AddWidget(mProjectList);
|
||||
mTabWidgets.Add(mProjectList);
|
||||
|
||||
mEditWidget = AddEdit("");
|
||||
mEditWidget.mOnKeyDown.Add(new => EditKeyDownHandler);
|
||||
mEditWidget.mOnContentChanged.Add(new (evt) => { mFilterChanged = true; });
|
||||
|
||||
FindProjects();
|
||||
}
|
||||
|
||||
void FindProjects()
|
||||
{
|
||||
for (let registryEntry in gApp.mBeefConfig.mRegistry)
|
||||
{
|
||||
InstalledProject installedProject = new .();
|
||||
installedProject.mName = new String(registryEntry.mProjName);
|
||||
switch (registryEntry.mLocation.mVerSpec)
|
||||
{
|
||||
case .Path(let path):
|
||||
installedProject.mPath = new String();
|
||||
Path.GetAbsolutePath(path, registryEntry.mConfigFile.mConfigDir, installedProject.mPath);
|
||||
installedProject.mPath.Append(Path.DirectorySeparatorChar);
|
||||
installedProject.mPath.Append("BeefProj.toml");
|
||||
default:
|
||||
}
|
||||
mInstalledProjectList.Add(installedProject);
|
||||
}
|
||||
}
|
||||
|
||||
void EditKeyDownHandler(KeyDownEvent evt)
|
||||
{
|
||||
switch (evt.mKeyCode)
|
||||
{
|
||||
case .Up,
|
||||
.Down,
|
||||
.PageUp,
|
||||
.PageDown:
|
||||
mProjectList.KeyDown(evt.mKeyCode, false);
|
||||
default:
|
||||
}
|
||||
|
||||
if (evt.mKeyFlags == .Ctrl)
|
||||
{
|
||||
switch (evt.mKeyCode)
|
||||
{
|
||||
case .Home,
|
||||
.End:
|
||||
mProjectList.KeyDown(evt.mKeyCode, false);
|
||||
default:
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void ValueMouseDown(ListViewItem clickedItem, float x, float y, int32 btnNum, int32 btnCount)
|
||||
{
|
||||
DarkListViewItem item = (DarkListViewItem)clickedItem.GetSubItem(0);
|
||||
|
||||
mProjectList.GetRoot().SelectItemExclusively(item);
|
||||
mProjectList.SetFocus();
|
||||
|
||||
if ((btnNum == 0) && (btnCount > 1))
|
||||
{
|
||||
DoImport();
|
||||
}
|
||||
}
|
||||
|
||||
void FilterFiles()
|
||||
{
|
||||
let root = mProjectList.GetRoot();
|
||||
root.Clear();
|
||||
|
||||
String filterString = scope String();
|
||||
mEditWidget.GetText(filterString);
|
||||
filterString.Trim();
|
||||
|
||||
for (var installedProject in mInstalledProjectList)
|
||||
{
|
||||
if ((!filterString.IsEmpty) && (installedProject.mName.IndexOf(filterString, true) == -1))
|
||||
continue;
|
||||
|
||||
var listViewItem = mProjectList.GetRoot().CreateChildItem();
|
||||
listViewItem.Label = installedProject.mName;
|
||||
|
||||
var subListViewItem = listViewItem.CreateSubItem(1);
|
||||
subListViewItem.Label = installedProject.mPath;
|
||||
|
||||
mFilteredList.Add(installedProject);
|
||||
}
|
||||
|
||||
ListViewItem bestItem = null;
|
||||
int32 bestPri = -1;
|
||||
for (int32 childIdx = 0; childIdx < root.GetChildCount(); childIdx++)
|
||||
{
|
||||
var listViewItem = root.GetChildAtIndex(childIdx);
|
||||
var projectSource = mFilteredList[childIdx];
|
||||
|
||||
int32 pri;
|
||||
sMRU.TryGetValue(projectSource.mPath, out pri);
|
||||
if (pri > bestPri)
|
||||
{
|
||||
bestItem = listViewItem;
|
||||
bestPri = pri;
|
||||
}
|
||||
}
|
||||
|
||||
if (bestItem != null)
|
||||
{
|
||||
mProjectList.GetRoot().SelectItemExclusively(bestItem);
|
||||
mProjectList.EnsureItemVisible(bestItem, true);
|
||||
}
|
||||
}
|
||||
|
||||
public void DoImport()
|
||||
{
|
||||
let root = mProjectList.GetRoot();
|
||||
for (int idx < root.GetChildCount())
|
||||
{
|
||||
let listViewItem = root.GetChildAtIndex(idx);
|
||||
if (!listViewItem.Selected)
|
||||
continue;
|
||||
|
||||
let entry = mFilteredList[idx];
|
||||
|
||||
let verSpec = new VerSpecRecord();
|
||||
verSpec.SetSemVer("*");
|
||||
|
||||
let project = gApp.mProjectPanel.ImportProject(entry.mPath, verSpec);
|
||||
if (project == null)
|
||||
{
|
||||
delete verSpec;
|
||||
return;
|
||||
}
|
||||
project.mLocked = true;
|
||||
project.mLockedDefault = true;
|
||||
}
|
||||
|
||||
Close();
|
||||
}
|
||||
|
||||
public override void AddedToParent()
|
||||
{
|
||||
base.AddedToParent();
|
||||
mEditWidget.SetFocus();
|
||||
|
||||
FilterFiles();
|
||||
}
|
||||
|
||||
public override void ResizeComponents()
|
||||
{
|
||||
base.ResizeComponents();
|
||||
|
||||
//var font = DarkTheme.sDarkTheme.mSmallFont;
|
||||
|
||||
float insetSize = GS!(6);
|
||||
mProjectList.Resize(insetSize, insetSize, mWidth - insetSize - insetSize, mHeight - GS!(66));
|
||||
mEditWidget.Resize(insetSize, mProjectList.mY + mProjectList.mHeight + insetSize, mWidth - insetSize - insetSize, GS!(22));
|
||||
}
|
||||
|
||||
public override void CalcSize()
|
||||
{
|
||||
mWidth = GS!(660);
|
||||
mHeight = GS!(512);
|
||||
}
|
||||
|
||||
public override void Resize(float x, float y, float width, float height)
|
||||
{
|
||||
base.Resize(x, y, width, height);
|
||||
ResizeComponents();
|
||||
}
|
||||
|
||||
public override void DrawAll(Graphics g)
|
||||
{
|
||||
base.DrawAll(g);
|
||||
IDEUtils.DrawOutline(g, mProjectList);
|
||||
}
|
||||
|
||||
public override void Update()
|
||||
{
|
||||
base.Update();
|
||||
|
||||
if (mFilterChanged)
|
||||
{
|
||||
FilterFiles();
|
||||
mFilterChanged = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue